Niedawno powiedziano mi, że sposób, w jaki korzystam z mojego .ContinueWith for Tasks, nie jest właściwym sposobem ich używania. Nie znalazłem jeszcze dowodów na to w Internecie, więc zapytam was i zobaczę odpowiedź. Oto przykład, jak używam .ContinueWith:
public Task DoSomething()
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine("Step 1");
})
.ContinueWith((prevTask) =>
{
Console.WriteLine("Step 2");
})
.ContinueWith((prevTask) =>
{
Console.WriteLine("Step 3");
});
}
Teraz wiem, że to prosty przykład i będzie działać bardzo szybko, ale załóżmy, że każde zadanie wykonuje dłuższą operację. Więc powiedziano mi, że w .ContinueWith musisz powiedzieć prevTask.Wait (); w przeciwnym razie możesz pracować przed zakończeniem poprzedniego zadania. Czy to w ogóle jest możliwe? Założyłem, że moje drugie i trzecie zadanie zostanie uruchomione dopiero po zakończeniu poprzedniego zadania.
Co mi powiedziano, jak napisać kod:
public Task DoSomething()
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine("Step 1");
})
.ContinueWith((prevTask) =>
{
prevTask.Wait();
Console.WriteLine("Step 2");
})
.ContinueWith((prevTask) =>
{
prevTask.Wait();
Console.WriteLine("Step 3");
});
}