In genere è brutto attendere le operazioni asincrone nell'elaborazione in background (non è necessario il risultato)

3

Quindi ho lavorato con l'elaborazione in background e i sistemi event-driven, ovvero Azure WebJobs e ServiceBus. E mentre c'è un uso estensivo della programmazione di async/await , mi chiedo sempre se è generalmente una cattiva pratica a await operazioni asincrone quando non ha affatto bisogno dei risultati ulteriormente nel programma. Più simile a un fuoco e dimenticare.

So che await non bloccherà un thread ma perché forzare la CPU a ritornare al tuo metodo dopo await se non succede nulla o non hai bisogno del risultato del metodo. Perché non si dovrebbe saltare solo await sulla propria operazione, la CPU non ha mai bisogno di ritornare al proprio metodo e il thread può essere restituito al pool. Questa situazione è incendiaria e dimentica.

EDIT: esempi di codice

async Task WriteEvent(string event)
{
    //some logic
    Event parsedEvent = new Event(event);
    //other logic

    _eventService.WriteEventAsync(parsedEvent); // no await
}

L'alternativa al blocco di codice precedente:

async Task WriteEvent(string event)
{
    //some logic
    Event parsedEvent = new Event(event);
    //other logic

    await _eventService.WriteEventAsync(parsedEvent); // await
}
    
posta ethane 12.04.2018 - 08:19
fonte

1 risposta

4

Non c'è niente di sbagliato nell'operazione asincrona "fire-and-forget". Ma devi assicurarti di poter gestire eventuali eccezioni, poiché non c'è nessuno che le gestisca in tali situazioni.

Una possibile soluzione è:

async void WriteEventAsyncEx()
{
    try
    {
        await _eventService.WriteEventAsync(parsedEvent);
    }
    catch(Exception ex)
    {
        // handle exception
        // letting it through would result in UnhandledTaskException killing application
    }
}

async Task WriteEvent(string event)
{
    //some logic
    Event parsedEvent = new Event(event);
    //other logic

    WriteEventAsyncEx(); // no await
}
    
risposta data 12.04.2018 - 08:29
fonte

Leggi altre domande sui tag