Próbuję użyć async i oczekuję poleceń w formularzu z VS2012 framework 4.5. Moja metoda asynchroniczna SlowMethodAsync niczego nie zwraca. Uwaga: ten kod działa poprawnie w aplikacji konsoli.Dlaczego otrzymuję WaitingforActivation TaskStatus
private void button1_Click(object sender, EventArgs e)
{
var task = SlowMethodAsync();
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
System.Threading.Tasks.TaskStatus status = task.Status;
Console.WriteLine("Slow method result on Thread: {0}", task.Result); //This line never executes
Console.WriteLine("Main complete on {0}", Thread.CurrentThread.ManagedThreadId);
}
//Why is this method not returning anything?
static async Task<int> SlowMethodAsync()
{
Console.WriteLine("Slow method started on Thread: {0}", Thread.CurrentThread.ManagedThreadId);
await Task.Delay(2000);
Console.WriteLine("Slow method complete on Thread: {0}", Thread.CurrentThread.ManagedThreadId);
return 42;
}
Solidna odpowiedź, jak zwykle. Pracowałem w wielu zespołach, w których większość programistów nie rozumiała kontekstu, w którym wykonywali ich wątki (co częściej powodowało wyjątki podczas próby aktualizacji elementów UI z kontekstu synchronizacji poza trybem UI). Sądzę, że stanowi to wadę dokumentacji API, która czyni pewne zastrzeżenia dla programistów, którzy nie posiadają wiedzy na temat koncepcji systemów operacyjnych/programowania równoległego (jedna z podstawowych grup, którą ten sprytny API próbuje obsłużyć). Masz pomysł, jak społeczność może temu zaradzić? – marr75
@ marr75: W WinForms UIs jest * ogromna * ilość dokumentacji wokół wątków. Podobnie jest z wieloma informacjami na temat metod asynchronicznych, chociaż jest to zdecydowanie bardziej zaawansowany temat. Problemem nie jest brak dokumentacji, IMO - to brak ludzi * czytanie * dokumentacji. –
Wow to działało :) Jestem nowy w frameworku 4.5. Dzięki za pomoc – user2221178