SyncAsyncEventArgs.IsRunningSynchronously Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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 à
Azure SDK for .NET