Это безопасно использовать Метод продолжения (...)
на 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 Способ
Возвращенная задача не будет запланирована для исполнения до текущая задача завершилась, заканчивается ли она в связи с запуском завершение успешно, не образуется из-за необработанного исключения или Выход в начале из-за отмены.
К сожалению, не говоря уже о том, что произойдет, если этот метод называется, и задача уже завершена.
заранее спасибо за любую информацию, которую вы можете предоставить! :)