В существующем состоянии не требуется Async Await Pattern или Tasks , поскольку все, что вы делаете, - это обновление UI и * 1007. * UI являющийся однопоточный
Хотя вы предполагаете, что вы делаете что-то вроде IO Bound природы, которая может остановить ваш поток пользовательского интерфейса (например, доступ к БД, ЭСТ), вы можете сделать что-то вроде этого.
private async Task DoSomethingAsync()
{
...
await DoSomtehingAwsomeAsync(list1);
await DoSomtehingAwsomeAsync(list2);
}
...
private async Task ChangeText(List<Control> lst)
{
// Awesome IO bound work here
// await CallDataBaseAsync();
// await VisitGrandMotherAsync();
foreach (var ctrl in lst)
{
ctrl.Text = "22";
}
}
В этом случае текущий SyncronizationContext
будет передаваться в IAsyncStateMachine
, создаваемый компилятором каждый раз, когда вы вызываете await
, а продолжение запускается в вызывающем context (т.е. все после await
). Это будет означать, что весь ваш код UI отправляется обратно в поток UI (что сведет на нет ваши исключения из нескольких потоков).