Мне было интересно, были ли какие-либо последствия для производительности между использованием TPL TaskFactory.FromAsync
и использованием TaskFactory.StartNew
для блокировки версий методов. Я пишу TCP-сервер, который будет поддерживать не более 100 одновременных подключений. После написания кода с первой опцией и цепочки нескольких операций чтения и записи с продолжением, я остался с уродливым, трудно отлаживающим кодом.
Я считаю, что писать код с синхронной версией, а затем обертывать ее с помощью Задачи, уменьшит сложность и увеличит тестируемость, но я беспокоюсь о последствиях производительности для этого.
Например, существуют ли различия в производительности между этими двумя вызовами:
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));