Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
То есть, await — простой синтаксический сахар над ContinueWith, который, помимо всего прочего, умеет удобно обрабатывать исключения.«Простым синтаксическим сахаром» он будет после ConfigureAwait(false), т. к. ContinueWith вызовет continuation на потоке из пула. А так он ещё и захватывает контекст синхронизации и далее по тексту.
Console.WriteLine("Hello world!");
Console.WriteLine("Got some data");
Плюс подхода в том, что вызывающий поток работает до первого await, а после этого возвращается в пул потоков
async/await
) private Task<string> DownloadStringWithWebClientAsync(System.Net.WebClient client, Uri url)
{
var tcs = new TaskCompletionSource<string>();
client.DownloadStringCompleted += (_s, _e) =>
{
if (_e.Cancelled)
tcs.TrySetCanceled();
else if (_e.Error != null)
tcs.TrySetException(_e.Error);
else
tcs.TrySetResult(_e.Result);
};
client.DownloadStringAsync(url);
return tcs.Task;
}
Недопонимание про async/await и многопоточность в C#