Безопасно, позвонить в метод продолжительного сдачи на TaskCompletionsource.task (у которого было под названием его.

Это безопасно использовать Метод продолжения (...) на A TaskCompletionsource.task Если Taskscompletionsource.setresult (...) уже называется?

Этот базовый код, надеюсь, поможет обратиться к вопросу:

// this was written inside the question box, please excuse any silly errors and lack of error checking (I'm not near VS right now)...

private WebClient _webClient = new WebClient();

public Task GetExamplePage() {

    var tcs = new TaskCompletionSource();

    web.DownloadStringCompleted += (s, ea) => tcs.SetResult(ea.Result);

    web.DownloadStringAsync(new URI(@"http://www.example.com/example.html"));

    return tcs.task;
}

public void ProcessExamplePage() {

    var task = GetExamplePage();

    Thread.Sleep(1000);

    task.ContinueWith(t => Console.WriteLine(t.Result)); // *line in question*
}

будет выполнять Console.Writeline (...) , если WebClient.downloadStringCompleted событие уже уволилось до SET задач. ContinueWith устанавливается?

MSDN имеет это сказать ( Task.Continuewith ):

Task.ContinueWith Способ

Возвращенная задача не будет запланирована для исполнения до текущая задача завершилась, заканчивается ли она в связи с запуском завершение успешно, не образуется из-за необработанного исключения или Выход в начале из-за отмены.

К сожалению, не говоря уже о том, что произойдет, если этот метод называется, и задача уже завершена.

заранее спасибо за любую информацию, которую вы можете предоставить! :)

18
задан InvertedAcceleration 15 September 2011 в 15:41
поделиться