Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么时候C#事件应该同步运行?_C#_Multithreading_Performance_Events_Asynchronous - Fatal编程技术网

什么时候C#事件应该同步运行?

什么时候C#事件应该同步运行?,c#,multithreading,performance,events,asynchronous,C#,Multithreading,Performance,Events,Asynchronous,我曾多次指出,性能问题是由于C#事件处理程序花费的时间比预期的要长,从而在执行时有效地阻塞了工作线程 从那以后,我总是将事件编码为异步运行(使用BeginInvoke),而不考虑是否严格需要 这种方法是否有任何缺点(除了性能受到的轻微影响)?在哪些情况下需要在同一个线程上运行事件(除了在等待结果时要阻塞的明显情况)?它不是默认行为肯定有一些原因。异步性的任何缺点都适用于您的方法。如果在UI上下文中,并且您在事件处理程序中更改了UI,那么您也会遇到问题。很抱歉,对于堆栈溢出,不建议使用此类开放式问

我曾多次指出,性能问题是由于C#事件处理程序花费的时间比预期的要长,从而在执行时有效地阻塞了工作线程

从那以后,我总是将事件编码为异步运行(使用
BeginInvoke
),而不考虑是否严格需要


这种方法是否有任何缺点(除了性能受到的轻微影响)?在哪些情况下需要在同一个线程上运行事件(除了在等待结果时要阻塞的明显情况)?它不是默认行为肯定有一些原因。

异步性的任何缺点都适用于您的方法。如果在UI上下文中,并且您在事件处理程序中更改了UI,那么您也会遇到问题。很抱歉,对于堆栈溢出,不建议使用此类开放式问题。请参阅常见问题解答:@SpikeX我认为这个问题符合它所说的“编程专业特有的实用、可回答的问题”@SpikeX这不是无限期的。我只是问为什么异步不是.Net中的默认值?嗯,在大多数情况下,它确实是不需要的。BeginInvoke仍将在主线程中运行事件。