TaskCompletionSource для представления Async - PullRequest
1 голос
/ 29 марта 2012

Извините, мои знания с темами все еще немного слабые.

Просто читаю.Если вы используете TaskCompletionSource для представления какой-либо операции асинхронного ввода-вывода.

Как, например, некоторые DownloadAsync, вы не связываете поток, как я понимаю?

Я всегда думал, что когда что-то происходит асинхронно, это должно бытьсвязывать нить?

Любые разъяснения приветствуются.

Спасибо

1 Ответ

1 голос
/ 09 октября 2012

DownloadFileAsync веб-клиента предоставляет хорошую возможность применить TPL в асинхронной модели на основе событий.Поскольку действие, включающее вызов DownloadFileAsync, завершается быстро, настоящая работа не выполняется до тех пор, пока не будет запущено событие DownloadFileCompleted.Это где TaskCompletionSource вступает в игру.

   var downloadCompletionSource = new TaskCompletionSource<bool>();
  webClient.DownloadFileCompleted+=
                (s, e) =>
                    {
                         if (e.Error != null)
                           {
                                downloadCompletionSource.SetException(e.Error);
                            }
                            else
                            {
                                downloadCompletionSource.SetResult(true);
                            }
                        }

                    };

          webClient.DownloadFileAsync(new Uri(downloadUrl), destinationFilePath);

            try
            {
                downloadCompletionSource.Task.Wait();

            }
            catch (AggregateException e)
            {

            }

Больше можно найти здесь в MSDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...