得不能转换为' void'到Systen,Action尝试完成任务时

时间:2017-08-09 19:35:38

标签: c# linq asynchronous

我在尝试创建对以下方法的异步调用时遇到了一些问题

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"));

1 个答案:

答案 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") })} ;

这应该可以解决问题