使用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