Я предполагаю, что вы повторно используете один и тот же байтовый массив.Параметр будет записан, но в этом случае, поскольку ничто в вашем методе не захватывает параметр, он фактически захватывает ссылку.Если вы хотите иметь возможность повторно использовать исходный массив (т. Е. Заполнить его новыми данными), но по-прежнему читать старые данные в рамках задачи, вам необходимо сделать копию этих данных.например,
private static Task<string> EncryptChunk( byte[] buffer, CryptoEngine c )
{
buffer = buffer.ToArray(); // Copy the data
var tcs = new TaskCompletionSource<string>();
Task.Factory.StartNew( () =>
{
tcs.SetResult( c.Encrypt( buffer ) );
} );
return tcs.Task;
}
В качестве отступления, почему вы используете здесь TaskCompletionSource
вместо просто:
return Task<string>.Factory.StartNew(() => c.Encrypt(buffer));
или используете вывод типа:
return Task.Factory.StartNew(() => c.Encrypt(buffer));