2017-08-09 50 views
0

我目前遇到一些问题,试图创造一些异步调用下面的方法让试图使任务

QueryList.ForEach(x =>{ Value.Add(new Results { Name = x.Name, QueryResult = sumo.Search(x.QueryString, From, To, "CST") })});}); 

我想是时候,当无法从“空”到SYSTEN,行动转换能够创建任务与sumo.Search(x.QueryString,发件人,收件人, “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") })} ; 
      }); 

但我发现了“C注释从'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

的问题是在这条线:

Task[] task = new Task[] { new Task(Value.Add(new Results { Name = x.Name, QueryResult = 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") })} ; 

这应该做的伎俩

+2

除非你正在创建你应该永远不会被调用'新的任务调度:改变你的代码,以便您提供一个Action委托,可以使用lambda表达式或者创建行动应该使用任务'a'Task.Run'。 –

+1

就此达成一致。我只是添加了最小变化,以便其代码编译 – taquion

+0

谢谢!它现在有效,对不起我以前没有确认! –