Come creare un wrapper asincrono per il metodo sincrono?Modo per creare wrapper asincrono
// sync method
public void LongOperation()
{
//code...
}
// versions of wrapper
public async Task LongOpertionWrapperAsyncV1()
{
var task = Task.Factory.StartNew(LongOperation);
await task.ConfigureAwait(false);
}
public Task LongOpertionWrapperAsyncV2()
{
var task = Task.Factory.StartNew(LongOperation);
task.ConfigureAwait(false);
return task;
}
Sebbene l'uso di entrambe le versioni non differiscono.
async Task Executor()
{
await LongOpertionWrapperAsyncV1();
await LongOpertionWrapperAsyncV2();
}
Per i metodi che restituiscono il valore (Task <T>), io uso la prima versione.
Ma mi piacerebbe sapere la vostra opinione.
E c'è una differenza generale tra queste versioni?
Per la cronologia: http://blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx – ken2k
BTW, questo: 'task.ConfigureAwait (false);' non esegue *nulla*. 'ConfigureAwait()' * restituisce * un waiterver, se ignori il valore restituito, non avrà alcun effetto. – svick