使用L2S與新C#5的最佳實踐async/await
關鍵字與this方法比較?在網路上找不到任何資訊。異步使用Linq到Sql與新的異步/等待
6
A
回答
6
EF 5沒有異步/等待支持,但開源版本正在積極尋找可能性。編輯:EF中的異步支持記錄在http://msdn.microsoft.com/en-us/data/jj819165.aspx。它不會將結果以流水作爲結果(就像您在RX中發現的那樣),但它確實使數據庫調用異步。
至於LINQ to SQL,除了在Task.Factory.Start操作中包裝你的請求之外,我不會屏住呼吸,希望基於任務的異步(async/await是必需的)將由Microsoft爲Linq實現到SQL。
您可以使用IQToolkit並在必要時添加自己的異步支持。此外,Mono已經實現了LINQ to SQL,您可以使用異步支持來擴展它。
3
Scott Hanselman有一個interesting post他演示瞭如何在現有的Linq to SQL查詢之上生成異步API。我沒有時間玩這個想法,但我猜測可以創建一個更通用的擴展方法,它允許將相同的技術擴展到IQueryable或IEnumerable類型的任何對象。
這裏是直接從他的帖子的代碼作爲參考。
SqlCommand _beginFindCmd = null;
public IAsyncResult BeginFind(int id, AsyncCallback callback, Object asyncState)
{
var query = from w in _db.Widgets
where w.Id == id
select w;
_beginFindCmd = _db.GetCommand(query) as SqlCommand;
_db.Connection.Open();
return _beginFindCmd.BeginExecuteReader(callback, asyncState, System.Data.CommandBehavior.CloseConnection);
}
public Widget EndFind(IAsyncResult result)
{
var rdr = _beginFindCmd.EndExecuteReader(result);
var widget = (from w in _db.Translate<Widget>(rdr)
select w).SingleOrDefault();
rdr.Close();
return widget;
}
通過一點點的工作,人們可以使這個TPL和同樣更清潔的單個異步方法。如果我有機會做到這一點,我會發布我的想法。
相關問題
- 1. 異步/等待與
- 2. 異步編程使用異步/等待
- 3. 異步等待在LINQ .TakeWhile
- 4. 異步,異步等待
- 5. LINQ選擇新的異步/等待
- 6. NodeJs - 異步/待機異步/等待
- 7. 使用異步和等待
- 8. 使用異步/等待$ .ajax
- 9. 異步使用異步和等待更新Winforms中一個TreeView
- 10. 與HTTPClient foreach異步/等待
- 11. 等待異步與鐵蟒
- 12. ContextBoundObject與異步/等待
- 13. ICommandHandler/IQueryHandler與異步/等待
- 14. 等待/異步與Vs2010
- 15. 異步和等待與HttpWebRequest.GetResponseAsync
- 16. MvvmLight IDataService與異步等待
- 17. 與Microsoft Unity異步/等待
- 18. 異步/等待與線程
- 19. 異步等待的異步行爲
- 20. 異步等待不等待
- 21. 使用Parallel.ForEach與/或異步/等待
- 22. 如何使用RestSharp與異步/等待
- 23. 使用無極與異步/等待
- 24. 異步一直等待異步
- 25. 異步類委託(異步/等待)
- 26. TypeScript異步/等待
- 27. 異步/等待:ConfigureAwait
- 28. 異步/等待appengine
- 29. 異步不等待
- 30. 異步/等待&AsyncController?
也許有可能創建一些包裝或東西?順便說一下,最新的EF有支持異步/等待? – UserControl