Phương pháp hay nhất để sử dụng L2S với các từ khóa C# 5 async/await
mới so sánh với phương pháp this là gì? Không thể tìm thấy bất kỳ trang web nào trên web.Sử dụng LINQ to Sql không đồng bộ với async/await mới
Trả lời
EF 5 không có hỗ trợ không đồng bộ/đang chờ, nhưng phiên bản nguồn mở đang tích cực xem xét các khả năng tại đây. EDIT: hỗ trợ Async trong EF được ghi nhận tại http://msdn.microsoft.com/en-us/data/jj819165.aspx. Nó không truyền các kết quả khi chúng được ngậm nước (như bạn sẽ thấy với RX) nhưng nó làm cho cơ sở dữ liệu gọi không đồng bộ.
Đối với LINQ to SQL, bên ngoài gói yêu cầu của bạn trong một hoạt động Task.Factory.Start, tôi sẽ không giữ hơi thở của tôi hy vọng rằng nhiệm vụ dựa async (yêu cầu cho async/await) sẽ được thực hiện bởi Microsoft cho LINQ đến SQL.
Bạn có thể sử dụng IQToolkit và mở rộng thêm hỗ trợ async của riêng bạn nếu cần thiết. Ngoài ra, Mono đã triển khai LINQ to SQL mà bạn có thể mở rộng bằng hỗ trợ async.
Scott Hanselman có một số interesting post nơi ông chứng minh cách người ta có thể tạo ra một API không đồng bộ trên đầu trang của truy vấn LINQ to SQL hiện có. Tôi không có thời gian để chơi xung quanh với ý tưởng nhưng tôi đoán rằng người ta có thể tạo ra một phương pháp mở rộng chung chung hơn mà sẽ cho phép cùng một kỹ thuật được mở rộng đến bất kỳ đối tượng của loại IQueryable hoặc IEnumerable.
Đây là mã trực tiếp từ bài đăng của anh ấy để sử dụng làm tài liệu tham khảo.
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;
}
Với một chút công việc, người ta có thể làm cho TPL này và thậm chí còn sạch hơn như một phương pháp không đồng bộ. Nếu tôi có cơ hội để làm điều này, tôi sẽ đăng những gì tôi nghĩ ra.
- 1. Đồng thời với LINQ to SQL và ASP.NET
- 2. Đừng MERGE sử dụng LINQ to SQL
- 3. Sử dụng XQuery trong LINQ to SQL?
- 4. LINQ to SQL hoặc LINQ to DataSet?
- 5. Sử dụng Biên soạn LINQ to SQL với ExecuteMethodCall
- 6. Sử dụng LINQ to SQL và Sql Reporting Services
- 7. NOLOCK với LINQ to SQL
- 8. Sử dụng "là null/không NULL" trong LINQ to SQL
- 9. LINQ to SQL với SQL Azure
- 10. Làm cách nào để buộc LINQ to SQL KHÔNG sử dụng bộ nhớ cache?
- 11. LINQ to batch sql xóa
- 12. Sử dụng chứa trong LINQ to SQL tham gia
- 13. Áp dụng LINQ to SQL chéo
- 14. SQL to LINQ Tool
- 15. Thêm Nhiều kỷ lục sử dụng LINQ-to-SQL
- 16. Insert/Chọn với LINQ-To-SQL
- 17. LINQ to SQL và có
- 18. Sử dụng đại biểu cho chiếu trong LINQ to SQL
- 19. LINQ to SQL: Tái sử dụng biểu thức lambda
- 20. LINQ to SQL nvarchar problem
- 21. T-SQL IsNumeric() và LINQ-to-SQL
- 22. Có thể sử dụng/truy cập các chức năng vô hướng với LINQ to SQL không?
- 23. LINQ to SQL "không thích" toán tử
- 24. LINQ-to-sql orderby ThenBy
- 25. LINQ to SQL tạo bảng
- 26. LINQ to SQL trên Mono?
- 27. LINQ to SQL Decimal Parameter
- 28. NHibernate vs LINQ to SQL
- 29. LINQ to SQL: Concurrency độ phân giải
- 30. LINQ to SQL trong Compact Framework
Có thể tạo một số trình bao bọc hay gì đó? Btw, EF mới nhất có hỗ trợ cho async/await? – UserControl