¿Cuáles son las mejores prácticas para usar L2S con las nuevas palabras clave C# 5 async/await
en comparación con this? No se pudo encontrar ninguno en la web.Uso de Linq a Sql de forma asíncrona con nueva async/await
Respuesta
EF 5 no tiene soporte async/await, pero la versión de código abierto está buscando activamente posibilidades aquí. EDITAR: el soporte de Async en EF está documentado en http://msdn.microsoft.com/en-us/data/jj819165.aspx. No transmite los resultados porque están hidratados (como encontraría con RX) pero hace que las llamadas a la base de datos sean asincrónicas.
En cuanto a LINQ to SQL, aparte de completar su solicitud en una operación Task.Factory.Start, no contaría con la esperanza de que esa tarea basada en async (requerida para async/await) sea implementada por Microsoft para Linq a SQL.
Puede usar el IQToolkit y ampliarlo agregando su propio soporte asíncrono si es absolutamente necesario. Además, Mono ha implementado LINQ to SQL, que es posible que pueda ampliar con soporte asíncrono.
Scott Hanselman tiene interesting post donde demuestra cómo se podría producir una API asincrónica sobre una consulta existente de Linq a SQL. No tengo demasiado tiempo para jugar con la idea, pero supongo que se podría crear un método de extensión más genérico que permita expandir la misma técnica a cualquier objeto de tipo IQueryable o IEnumerable.
Aquí está el código directamente de su publicación para usar como referencia.
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;
}
Con un poco de trabajo se podría hacer este TPL y, de manera similar, incluso más limpio como un único método asíncrono. Si tengo la oportunidad de hacer esto, publicaré lo que se me ocurra.
- 1. Uso de Linq a SQL y Sql Reporting Services
- 2. Uso de Linq con WCF
- 3. Criando eventos de forma asíncrona
- 4. Linq a Sql con PostgreSQL
- 5. NOLOCK con Linq a SQL
- 6. Descargar pdf de forma asíncrona
- 7. ¿Linq a SQL o Linq a DataSet?
- 8. sql problema de consulta asíncrona
- 9. forma más eficiente para actualizar con LINQ to SQL
- 10. Uso de IQueryable con Linq
- 11. JavaScript: ¿Cómo descargar JS de forma asíncrona?
- 12. LINQ-to-SQL - 'Suma' dentro de una nueva selección
- 13. ¿Buena muestra sofisticada de linq a sql?
- 14. LINQ a SQL .Any() con múltiples condiciones?
- 15. LINQ seleccionar nueva clase con un nombre
- 16. Pregunta de diseño de Linq a SQL
- 17. jQuery - Enviar una forma asíncrona
- 18. ¿Qué pasa con Linq a SQL?
- 19. Cómo llamar a cualquier método de forma asíncrona en C#
- 20. escribo de forma asíncrona a presentar en Perl
- 21. ¿Jquery append() se comporta de forma asíncrona?
- 22. Cómo eliminar una carpeta de forma asíncrona
- 23. filas UITableView cargan de forma asíncrona
- 24. Linq a SQL lambda join
- 25. Señales en Linq a Sql?
- 26. Hacer múltiples solicitudes HTTP de forma asíncrona
- 27. Escribir en un archivo de forma asíncrona
- 28. Aplicación cruzada de LINQ a SQL
- 29. Subcadena de un DateTime con extensiones de Linq a Sql
- 30. Eliminar de varias tablas (linq a sql)
¿Tal vez es posible crear alguna envoltura o algo así? Por cierto, ¿la última EF tiene soporte para async/await? – UserControl