SyncAsyncEventArgs.IsRunningSynchronously Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém um valor que indica se o manipulador de eventos foi invocado de forma síncrona ou assíncrona. Confira SyncAsyncEventHandler<T> para obter mais detalhes.
public bool IsRunningSynchronously { get; }
member this.IsRunningSynchronously : bool
Public ReadOnly Property IsRunningSynchronously As Boolean
Valor da propriedade
Comentários
O mesmo SyncAsyncEventHandler<T> evento pode ser gerado de caminhos de código síncronos e assíncronos, dependendo se você está chamando métodos de sincronização ou assíncronos em um cliente. Se você escrever um manipulador assíncrono, mas elevá-lo de um método de sincronização, o manipulador fará a sincronização sobre assíncrona e poderá causar a falta de threadpool. Consulte Diagnosticing .NET Core ThreadPool Starvation with PerfView para obter uma explicação detalhada de como isso pode causar problemas graves de desempenho e fome do ThreadPool.
Você pode usar essa IsRunningSynchronously propriedade para marcar como o evento está sendo gerado e implementar seu manipulador adequadamente. Aqui está um manipulador de exemplo que é seguro para invocar de caminhos de código assíncronos e de sincronização.
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
Aplica-se a
Azure SDK for .NET