我有一个带有方法的异步类,当它完成处理时StartProcessing()
会引发一个事件。花费很少的时间。int ResultReady()
StartProcessing()
我想同步调用这个类。我的伪代码应该是这样的:
调用 StartProcessing()
等待/睡眠,直到结果准备好
返回结果
什么设计模式最适合这个?你能指点我一个代码示例吗?
我有一个带有方法的异步类,当它完成处理时StartProcessing()
会引发一个事件。花费很少的时间。int ResultReady()
StartProcessing()
我想同步调用这个类。我的伪代码应该是这样的:
调用 StartProcessing()
等待/睡眠,直到结果准备好
返回结果
什么设计模式最适合这个?你能指点我一个代码示例吗?
一种简单的方法是使用ManualResetEvent
事件处理程序和等待代码都可以访问的方法。Set
从事件处理程序调用,和WaitOne
(或具有超时的重载)从等待线程调用。请注意,这不能在 STA 线程上完成,因此您不能在 WinForms 线程(应该始终是 STA)中执行此操作 - 但无论如何您都不应该在 UI 线程中等待。
像这样的东西:
var async = new AsyncClass();
var manualEvent = new ManualResetEvent();
async.ResultReady += args => manualEvent.Set();
async.StartProcessing();
manualEvent.WaitOne();