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的解決方案 –