Я создал метод для сбора энтропии для моего приложения.
Я поместил это в Задачу, чтобы обеспечить асинхронную операцию для вызывающего.
Я хочу избежать вечного цикла при сборе энтропии издатчики, поэтому я использовал тайм-аут, который по умолчанию использует метод RNGCryptoServiceProvider.GetBytes()
.
public Task<byte[]> GetEntropy1(int length)
{
RNGCryptoServiceProvider entropyGen = new RNGCryptoServiceProvider();
byte[] entropyBuffer = new byte[2048];
try
{
semaphore.Wait();
Task t = Task.Run(() =>
{
/* gather entropy from sensors */
});
if (!t.Wait(5000))
{
entropyGen.GetBytes(entropyBuffer);
}
return entropyBuffer;
}
catch (Exception)
{
return entropyBuffer;
}
finally
{
this.semaphore.Release();
}
}
Но я не понимаю, почему, когда я возвращаю байтовый массив, я получаю предупреждение о неявном приведении.
Невозможно неявно преобразовать тип 'byte []' в 'System.Threading.Tasks.Task'
Если я использую async
в определении функции, то это предупреждение исчезнет.