Me preguntaba si hubo implicaciones de rendimiento entre el uso de TPL TaskFactory.FromAsync
y el uso de TaskFactory.StartNew
en las versiones de bloqueo de los métodos. Estoy escribiendo un servidor TCP que admitirá no más de 100 conexiones simultáneas. Después de escribir el código con la primera opción & encadenando varias operaciones de escritura de lectura & con continuar con, me quedé con un código feo y difícil de depurar.TPL TaskFactory.FromAsync vs Tareas con métodos de bloqueo
Creo que escribir código con la versión síncrona & luego envolverlo con una Tarea disminuiría la complejidad & aumentaría la capacidad de prueba, pero me preocupan las implicaciones de rendimiento de hacer esto.
Por ejemplo, ¿hay diferencias de rendimiento entre estos 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));
¿Tiene alguna fuentes que dicen llamar a un método Web (por ejemplo) usar Begin/End con Async es mejor que usar la versión síncrona con Async? Lo que dices tiene sentido, solo me gusta leerlo en algún lugar oficial. –