Partager via


SyncAsyncEventArgs.IsRunningSynchronously Propriété

Définition

Obtient une valeur indiquant si le gestionnaire d’événements a été appelé de manière synchrone ou asynchrone. Pour plus d’informations, consultez SyncAsyncEventHandler<T>.

public bool IsRunningSynchronously { get; }
member this.IsRunningSynchronously : bool
Public ReadOnly Property IsRunningSynchronously As Boolean

Valeur de propriété

Remarques

Le même SyncAsyncEventHandler<T> événement peut être déclenché à partir des chemins de code synchrones et asynchrones, selon que vous appelez des méthodes de synchronisation ou asynchrones sur un client. Si vous écrivez un gestionnaire asynchrone, mais que vous le déclenchez à partir d’une méthode de synchronisation, le gestionnaire effectue la synchronisation sur async et peut provoquer une insuffisance de ThreadPool. Pour obtenir une explication détaillée de la façon dont cela peut entraîner une insuffisance de ThreadPool et des problèmes de performances graves, consultez Diagnostic de la famine de threadpool .NET Core avec PerfView .

Vous pouvez utiliser cette IsRunningSynchronously propriété pour case activée comment l’événement est déclenché et implémenter votre gestionnaire en conséquence. Voici un exemple de gestionnaire qui peut être appelé en toute sécurité à partir des chemins de code de synchronisation et de code asynchrone.

var client = new AlarmClient();
client.Ring += async (SyncAsyncEventArgs e) =>
{
    if (e.IsRunningSynchronously)
    {
        Console.WriteLine("Wake up!");
    }
    else
    {
        await Console.Out.WriteLineAsync("Wake up!");
    }
};

client.Snooze(); // sync call that blocks
await client.SnoozeAsync(); // async call that doesn't block

S’applique à