Inv*_*ion 18 .net c# asynchronous task-parallel-library
如果已经被调用,ContinueWith(...)在a 上使用该方法是否安全? TaskCompletionSource.TaskTaskCompletionSource.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<string> GetExamplePage() {
var tcs = new TaskCompletionSource<string>();
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*
}
Run Code Online (Sandbox Code Playgroud)
Console.WriteLine(...)如果WebClient.DownloadStringCompleted事件在task.ContinueWith设置之前已经被触发,那么执行吗?
MSDN就是这么说的(Task.ContinueWith):
Task.ContinueWith方法
在当前任务完成之前,返回的任务将不会被安排执行,是否由于成功运行而完成,由于未处理的异常而导致故障,或者由于被取消而提前退出.
不幸的是,没有提到如果调用此方法并且任务已经完成会发生什么.
提前感谢您提供的任何信息!:)
小智 19
是的,这应该没问题,ContinueWith检查前一个任务是否完成,如果是,它将立即排队继续.
| 归档时间: |
|
| 查看次数: |
5647 次 |
| 最近记录: |