SyncAsyncEventArgs.IsRunningSynchronously Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene un valor que indica si el controlador de eventos se invocó de forma sincrónica o asincrónica. Consulte SyncAsyncEventHandler<T> para más información.
public bool IsRunningSynchronously { get; }
member this.IsRunningSynchronously : bool
Public ReadOnly Property IsRunningSynchronously As Boolean
Valor de propiedad
Comentarios
El mismo SyncAsyncEventHandler<T> evento se puede generar desde rutas de acceso de código sincrónicas y asincrónicas en función de si se llama a métodos sincrónicos o asincrónicos en un cliente. Si escribe un controlador asincrónico pero lo genera a partir de un método de sincronización, el controlador realizará la sincronización sobreasync y puede provocar el colapso de ThreadPool. Consulte Diagnóstico del hambre de ThreadPool de .NET Core con PerfView para obtener una explicación detallada de cómo puede causar el colapso de ThreadPool y problemas graves de rendimiento.
Puede usar esta IsRunningSynchronously propiedad para comprobar cómo se genera el evento e implementar el controlador en consecuencia. Este es un controlador de ejemplo que es seguro invocar desde rutas de acceso de código sincronizadas y asincrónicas.
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
Se aplica a
Azure SDK for .NET