1

以下不编译。这适用于4.0,aspx WebForms页面中的异步调用。如何将任务转换为C#4.0中的PageAsyncTask?

var task = Task.Factory.StartNew(() => Thread.Sleep(100)); 
var pat = new PageAsyncTask(task); //Doesn't compile, no such signature. 
Page.RegisterAsyncTask(pat); 

谷歌搜索失败了,因为我无法使用的所有不相关的4.5材料。我的意思是,我不能使用4.5。

如果我只是使用一个没有RegisterAsyncTask的任务,我会收到警告,表明WebForms中不支持任务,或者它挂起。

回答

1

你快到了。相反,与任务构建PageAsyncTask的,与返回的任务,像这样的方法构造它:

var pat = new PageAsyncTask(() => Task.Run(() => Thread.Sleep(100)));

对于.NET 4.0:

Action a =() => Thread.Sleep(100); var p = new PageAsyncTask((s, e, cb, o) => a.BeginInvoke(cb, o), a.EndInvoke, null, null);

+0

这并不在4.0编译,Task.Run是4.5。此外,PageAsyncTask报告说它不能将lambda转换为委托。 – MatthewMartin

+1

我更新了答案,以包含.net 4.0的解决方案 –