當您在控制器中使用Async/Await時,是否必須從AsyncController繼承,或者如果您使用Controller,它是否真的不會異步?怎麼樣的Asp.net網絡API?我不認爲有一個AsyncApiController。目前我只是從控制器和它的工作繼承,但它真的是異步?異步/等待&AsyncController?
4
A
回答
6
0
就Web API而言,您不需要Async控制器基類。所有你需要做的就是把你的返回值包裝在一個Task中。
例如,
/// <summary>
/// Assuming this function start a long run IO task
/// </summary>
public Task<string> WorkAsync(int input)
{
return Task.Factory.StartNew(() =>
{
// heavy duty here ...
return "result";
}
);
}
// GET api/values/5
public Task<string> Get(int id)
{
return WorkAsync(id).ContinueWith(
task =>
{
// disclaimer: this is not the perfect way to process incomplete task
if (task.IsCompleted)
{
return string.Format("{0}-{1}", task.Result, id);
}
else
{
throw new InvalidOperationException("not completed");
}
});
}
此外,在.NET 4.5,你可以從等待,異步受益寫出更簡單的代碼:
/// <summary>
/// Assuming this function start a long run IO task
/// </summary>
public Task<string> WorkAsync(int input)
{
return Task.Factory.StartNew(() =>
{
// heavy duty here ...
return "result";
}
);
}
// GET api/values/5
public async Task<string> Get(int id)
{
var retval = await WorkAsync(id);
return string.Format("{0}-{1}", retval, id);
}
相關問題
- 1. 等待或不等待一個AsyncController的異步方法
- 2. 異步等待不等待
- 3. 異步,異步等待
- 4. NodeJs - 異步/待機異步/等待
- 5. TypeScript異步/等待
- 6. 異步/等待:ConfigureAwait
- 7. 異步/等待appengine
- 8. 異步不等待
- 9. 異步/等待與
- 10. 等待/異步任務不等待
- 11. C#異步任務等待VS等待
- 12. 異步等待WhenAll不等待
- 13. DART異步/等待不等待
- 14. 等待異步HTTP請求的響應,無異步/等待
- 15. JS異步/等待 - 爲什麼等待需要異步?
- 16. 異步等待任務<T>沒有異步/等待
- 17. 異步編程使用異步/等待
- 18. 異步等待的異步行爲
- 19. 異步一直等待異步
- 20. 異步類委託(異步/等待)
- 21. 與HTTPClient foreach異步/等待
- 22. 異步並等待Vuejs
- 23. C#異步等待澄清?
- 24. 異步/等待嘲諷
- 25. c#異步和等待
- 26. 等待異步與鐵蟒
- 27. 異步等待在LINQ .TakeWhile
- 28. ConcurrencyMode多VS異步/等待
- 29. 異步/等待和任務
- 30. 使用異步和等待
見我的教程HTTP:// WWW。 asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4 – RickAndMSFT