你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
SyncAsyncEventArgs.IsRunningSynchronously 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取一个值,该值指示是以同步方式还是异步调用事件处理程序。 有关详细信息,请参阅 SyncAsyncEventHandler<T> 。
public bool IsRunningSynchronously { get; }
member this.IsRunningSynchronously : bool
Public ReadOnly Property IsRunningSynchronously As Boolean
属性值
注解
可以从同步和异步代码路径引发相同的 SyncAsyncEventHandler<T> 事件,具体取决于是在客户端上调用同步还是异步方法。 如果编写异步处理程序但从同步方法引发它,该处理程序将执行异步同步,并可能导致 ThreadPool 不足。 有关导致 ThreadPool 不足和严重性能问题的详细说明,请参阅 使用 PerfView 诊断 .NET Core ThreadPool 不足。
可以使用此属性IsRunningSynchronously来检查引发事件的方式,并相应地实现处理程序。 下面是一个示例处理程序,可以安全地从同步和异步代码路径调用。
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