Ich versuche, die AsyncEnumerator von https://www.nuget.org/packages/AsyncEnumerator/AsyncEnumerator warten nicht auf Aufgabe
Also verwende ich die Methode genau jedoch die gleiche wie ihr Beispiel schrieb, ist meine Aufgabe nicht warten, wo sein sollte und verlässt nur die Programme .
Ich rief die asynchrone fillData_async, und im Inneren haben sie eine Parallele, die meine langen Aufgaben ausführt und warten soll.
private void Form1_Load(object sender, EventArgs e)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
ConcurrentBag<phoneData> Concurrent_PhoneNoList = new ConcurrentBag<phoneData>();
using (SqlCommand cmd = new SqlCommand("Select * FROM numbers", conn))
{
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
phoneData temp = new phoneData();
int phoneno = 0;
if (int.TryParse(reader["number"].ToString(), out phoneno) == true)
{
temp.phoneID = (int.Parse(reader["id"].ToString()));
temp.phoneNo = phoneno;
}
Concurrent_PhoneNoList.Add(temp);
}
conn.Close();
}
string log += fillData_Async(Concurrent_PhoneNoList); // calls async here
stopwatch.Stop(); // instantly continues without waiting
TimeSpan ts = stopwatch.Elapsed;
string.Format("{0}:{1}", Math.Floor(ts.TotalMinutes), ts.ToString("ss\\.ff"));
log += "TotalTime: " + ts;
Application.Exit();
}
meine Asynchron-Methoden:
private async Task<string> fillData_Async(ConcurrentBag<phoneData> phoneNolist)
{
string log = "Total Lines Retrieved From Database : " + phoneNolist.Count + "<br/>";
int failures = 0;
await phoneNolist.ParallelForEachAsync(async item =>
{
string returned_Data = await callWebServiceTask(item.phoneNo);
if (returned_Data != "Failed")
{
item.Data = returned_Data;
}
else
{
//failedList1.Add(temp);
failures++;
}
}, maxDegreeOfParalellism: 20);
log += "Number of failures : " + failures;
return log;
}
private Task<string> callWebServiceTask(int phoneNo)
{
string datareturned = myverylongtask(phoneNo); // public static string
return Task.FromResult(datareturned);
}
'String log + = fillData_Async (Concurrent_PhoneNoList);' Ich bin überrascht, dass diese kompiliert auch ohne 'await' oder rufen Sie an die' .Result' Eigenschaft. –
Es scheint, dass 'Form1_Load' nicht auf das Beenden der asynchronen Methode wartet und dann Application.Exit()' aufruft, während die Methode noch ausgeführt wird. –
ja es kompiliert, soll es nicht so sein? –