用于多个事件处理程序的C#异步事件
我对事件和同步有一些困惑。我在.NETCore3.1中工作。我知道有多个事件处理程序需要彼此异步执行,但在联机进行一些研究之后,我不确定这些操作是否是异步的,它们必须是异步的。有C语言异步操作知识的人能给我一些指导吗?以下是基本设置:用于多个事件处理程序的C#异步事件,c#,.net,.net-core,C#,.net,.net Core,我对事件和同步有一些困惑。我在.NETCore3.1中工作。我知道有多个事件处理程序需要彼此异步执行,但在联机进行一些研究之后,我不确定这些操作是否是异步的,它们必须是异步的。有C语言异步操作知识的人能给我一些指导吗?以下是基本设置: public class ReceiveClass { public EventHandler<MyEventArgs> OnReceive; public void Receive(object myData) {
public class ReceiveClass {
public EventHandler<MyEventArgs> OnReceive;
public void Receive(object myData)
{
// some processing
OnReceive?.Invoke(new MyEventArgs { Data = myData });
}
}
公共类接收类{
公共事件处理程序OnReceive;
公共无效接收(对象myData)
{
//一些加工
OnReceive?.Invoke(newmyeventargs{Data=myData});
}
}
Receive方法可以异步调用,eventhandler可能有多个侦听器。侦听器是异步调用还是同步调用?如果是同步的,如何使其异步?将为事件的所有“订阅者”同步运行.Invoke部分。如果您希望在每个订阅服务器上异步执行某些操作,您可以自由执行
但是,如果您的应用程序要求异步运行调用,本节已经有讨论了如果您不想被事件处理程序阻止,可以从
线程池线程调用它们,方法是:
这意味着处理程序抛出的任何异常都将保持不被观察。什么是“可以异步调用Receive方法”?你是说在非UI线程上?在任务中。运行?顺便说一句:你可以测试一下。加入一些日志记录,包括线程ID…它是在任务中的非UI线程上调用的。运行
public void Receive(object myData)
{
// some processing
var handler = OnReceive;
if (handler != null)
{
var fireAndForget = Task.Run(handler.Invoke(new MyEventArgs { Data = myData }));
}
}