我在尝试创建对以下方法的异步调用时遇到了一些问题
QueryList.ForEach(x =>{ Value.Add(new Results { Name = x.Name, QueryResult = sumo.Search(x.QueryString, From, To, "CST") })});});
我希望能够使用 sumo.Search创建任务(x.QueryString,From,To," CST")
我尝试过:
QueryList.ForEach(x =>
{
var tasks = sumo.Search(x.QueryString, From, To, "CST");
Task[] task = new Task[] { new Task(Value.Add(new Results { Name = x.Name, QueryResult = sumo.Search(x.QueryString, From, To, "CST") })} ;
});
但我得到"无法转换为' void'到Systen,Action"。
我刚刚开始编码,所以我不知道如何解决这个问题。谢谢你的帮助!
仅供参考:
public class Results
{
public string Name { get; set; }
public JObject QueryResult { get; set; }
}
public class Query
{
public string Name { get; set; }
public string QueryString { get; set; }
}
List<Program.Query> QueryList = ser.Deserialize<List<Program.Query>>(System.IO.File.ReadAllText("Queries.json"));
答案 0 :(得分:1)
问题出在这一行:
Task[] task = new Task[] { new Task(Value.Add(new Results { Name = x.Name, QueryResult = sumo.Search(x.QueryString, From, To, "CST") })} ;
创建新任务时需要在构造函数中提供操作(如果任务返回值,则为Func)。更改代码以便提供Action委托,您可以使用lambda表达式创建操作:
Task[] task = new Task[] { new Task(()=> Value.Add(new Results { Name = x.Name, QueryResult = sumo.Search(x.QueryString, From, To, "CST") })} ;
这应该可以解决问题