TPL TaskFactory.FromAsync против задач с блокирующими методами

Мне было интересно, есть ли какие-либо последствия для производительности между использованием TPL TaskFactory.FromAsync и использованием TaskFactory.StartNew для блокирующих версий методы. Я пишу TCP-сервер, который будет поддерживать не более 100 одновременных подключений. После написания кода с первым вариантом и объединения нескольких операций чтения и записи с помощью continue, я остался с уродливым, сложно отлаживать код.

Я считаю, что написание кода с синхронной версией, а затем его упаковка в Task уменьшит сложность и повысит тестируемость, но меня беспокоит влияние этого на производительность.

Например, есть ли различия в производительности между эти 2 вызова:

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));
20
задан Jonathan Matheus 16 February 2011 в 16:11
поделиться