Проблема в том, что в TableAdapters нет асинхронных методов Fill.Это означает, что для запуска Fill без блокировки потока пользовательского интерфейса вам потребуется запустить на нем рабочий поток.Асинхронный CTP не поможет вам в этом - он упрощает использование асинхронных API, но не поможет, если асинхронная версия API не существует.
Но выполнение заполнения на рабочем местеПоток должен быть таким же простым, как ускорение Задачи:
public Task FillAsync()
{
return Task.Factory.StartNew( () =>
{
adapter1.Fill(ds1);
adapter2.Fill(ds2);
// etc
});
}
Теперь асинхронная CTP пригодится, если вам нужно проделать некоторую дополнительную работу после заливок, и вам нужна эта дополнительная работа для выполненияпоток пользовательского интерфейса:
public async Task RebindUI()
{
// Do stuff on UI thread
// Fill datasets on background thread
await FillAsync();
// When fill is complete do some more work on the UI thread
refreshControls();
}
По умолчанию при запуске в приложении WinForms / WPF / Silverlight, когда вы ожидаете, оно возобновится в потоке пользовательского интерфейса, поэтому refreshControls будет вызываться в вашем потоке пользовательского интерфейса после выполнения операции Fill.выполняется в фоновом потоке.
Вот пример, который охватывает этот здесь : (Отзывчивость пользовательского интерфейса -> Отзывчивый пользовательский интерфейс во время задач с привязкой к процессору)