Sto chiamando un metodo asincrono all'interno della mia applicazione console. Non voglio che l'app si interrompa poco dopo il suo avvio, cioè prima che vengano completate le attività attendibili. Sembra che io possa fare questo:Perché è necessario AsyncContext quando si utilizza async/await con un'applicazione console?
internal static void Main(string[] args)
{
try
{
Task.WaitAll(DoThisAsync());
}
catch (Exception ex)
{
Console.Error.WriteLine(ex);
throw;
}
}
internal static async Task DoThisAsync()
{
//...
}
Ma secondo Stephen Cleary's article sembra che non posso fare questo e invece creare una sorta di contesto per l'asincrona per tornare quando è fatto (per esempio AsyncContext).
Il codice sopra funziona, tuttavia, e restituisce il thread principale dopo Task.WaitAll(DoThisAsync());
, quindi perché è necessario utilizzare un contesto personalizzato?
Forse questo succede quando usi threadpool. I thread di Threadpool sono thread in background e solo il thread principale è in primo piano. Le applicazioni UI avranno un ciclo principale che non consente loro di uscire prima che succeda qualcosa, e le applicazioni di console di solito non hanno questo ciclo. Quindi, se non blocchi il tuo thread principale in attesa di qualcosa, la tua applicazione uscirà e il lavoro che stavi facendo su un threadpool non funzionerà più. Non sono sicuro però. – Spo1ler
Come menzionato da @StephenCleary, è solo una preferenza. Non importa quanto blocchi il thread, devi solo essere consapevole che se non riesci a gestire quel thread, l'applicazione uscirà (anche se gli altri thread non sono stati eseguiti) – Brandon
@Brandon Bene, * * questioni. Funzionano in modo diverso, ma è ovviamente possibile scrivere programmi di lavoro usando entrambi gli approcci. – Servy