我只是Async從書本上學習編程,呵呵!他們的例子不起作用。作者(WebAPI2 書中的 Adam Freeman,第 3 章,第 47 頁?。┫胍忉屢环N技術,當我們有一系列同步語句并且我們想要執行它們時Async。他說這是通過創建一個啟動任務來完成的,該任務包裝我們需要執行的語句并返回任務作為方法的結果。然后他說看這個例子。好驚喜!它甚至不起作用,因為它無法從 轉換long為Task<long>我該如何修復這段代碼?public interface ICustomController{ Task<long> GetPageSize(CancellationToken cancellationToken);}public Task<long> GetPageSize(CancellationToken cancellationToken){ WebClient wb = new WebClient(); Stopwatch sw = Stopwatch.StartNew(); List<long> results = new List<long>(); for(int i=0; i<10; i++) { if (!cancellationToken.IsCancellationRequested) { Debug.WriteLine("Making Request {0} ", i); results.Add(wb.DownloadData(TargetUrl).LongLength); } else { Debug.WriteLine("Cancelled..."); return 0; } } Debug.WriteLine("Elapsed ms: {0} ", sw.ElapsedMilliseconds); return (long)results.Average();}請注意,他故意從方法中刪除了aysncand ,以便他可以解釋這種技術......但他忘記了實際修復他的代碼。await
2 回答

守著星空守著你
TA貢獻1799條經驗 獲得超8個贊
我假設他想用來Task.Run()將工作加載到線程池線程。你可以像這樣使用它
public Task<long> GetPageSize(CancellationToken cancellationToken))
{
? ? return Task.Run(() =>?
? ? {
? ? ? ? ?// body of the original methode
? ? });
}
調用者可以等待返回的Task對象。
- 2 回答
- 0 關注
- 153 瀏覽
添加回答
舉報
0/150
提交
取消