2017-08-09 1 views
0

zu machen versuchen derzeit einige Probleme Ich habe, wenn einen asynchronen Aufruf die folgenden Methodebekommen kann nicht von ‚Leere‘ zu Systen, Aktion zu konvertieren, wenn einer Aufgabe

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

zu schaffen versuchen, würde ich sein will Lage, eine Aufgabe mit sumo.Search (x.QueryString, Von, an, "CST")

ich versuchte, zu erstellen:

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

Aber ich bin immer „c annot konvertiert von 'void' in 'System', Aktion '.

Ich beginne gerade mit dem Programmieren, also weiß ich nicht, wie ich dieses Problem lösen kann. Danke für die Hilfe!

Just for reference:

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

Antwort

1

Das Problem ist in dieser Zeile:

Task[] task = new Task[] { new Task(Value.Add(new Results { Name = x.Name, QueryResult = sumo.Search(x.QueryString, From, To, "CST") })} ; 

Wenn Erstellen eine neue Aufgabe benötigt eine Aktion im Konstruktor zur Verfügung zu stellen (oder ein Func, wenn die Aufgabe gibt einen Wert zurück). Ändern Sie den Code, so dass Sie einen Aktions Delegierten bieten, können Sie entweder erstellen Sie die Aktion mit Lambda-Ausdruck:

Task[] task = new Task[] { new Task(()=> Value.Add(new Results { Name = x.Name, QueryResult = sumo.Search(x.QueryString, From, To, "CST") })} ; 

Dies sollte den Trick

+2

Es sei denn, Sie sind eine Task-Scheduler zu schaffen, sollten Sie niemals anrufen werden 'neue Task "a" Task.Run "sollte stattdessen verwendet werden. –

+1

Einverstanden. Ich habe gerade die minimale Änderung hinzugefügt, damit der Code kompiliert – taquion

+0

Danke !! es funktioniert jetzt, tut mir leid, ich habe es vorher nicht bestätigt! –

Verwandte Themen