TPL TaskFactory.FromAsync vs Tareas con métodos de bloqueo
Me preguntaba si había alguna implicación de rendimiento entre el uso de TPLTaskFactory.FromAsync
y usandoTaskFactory.StartNew
en versiones de bloqueo de los métodos. Estoy escribiendo un servidor TCP que no admitirá más de 100 conexiones concurrentes. Después de escribir código con la primera opción y encadenar múltiples operaciones de lectura y escritura con continuar con, me quedé con un código feo y difícil de depurar.
Creo que escribir código con la versión síncrona y luego envolverlo con una Tarea disminuiría la complejidad y aumentaría la capacidad de prueba, pero me preocupan las implicaciones de rendimiento de hacerlo.
Por ejemplo, ¿hay alguna diferencia de rendimiento entre estas 2 llamadas:
NetworkStream stream;
byte[] data;
int bytesRead;
//using FromAsync
Task<int> readChunk = Task<int>.Factory.FromAsync (
stream.BeginRead, stream.EndRead,
data, bytesRead, data.Length - bytesRead, null);
//using StartNew with blocking version
Task<int> readChunk2 = Task<int>.Factory.StartNew(() =>
stream.Read(data, bytesRead, data.Length - bytesRead));