我在下面放置了一些非常基本的代码来说明我正在尝试做的事情。我有执行异步操作的“DoSomethingAshnc”方法。我希望“DoSomething”方法是一个不接受操作参数并返回 int 的同步方法。
public void DoSomething(Action<int> actionToPerformOnComplete)
{
DoSomethingAsync(delegate(int val)
{
actionToPerformOnComplete(val);
});
}
是否有可能让“DoSomething”返回一个整数,就好像该方法是同步发生的一样?
最佳答案
您需要在同步方法的末尾添加一些内容,告诉它等待其他调用完成。我假设您的异步方法将有一个事件来告诉调用者它何时完成。
如果是这样,那么我建议使用类似 ManualResetEvent 的东西,在同步线程中等待它,然后在异步线程的 Finish 事件接收器中设置它。
例子:
public void DoSomething(Action<int> actionToPerformOnComplete)
{
ManualResetEvent mre = new ManualResetEvent(false);
DoSomethingAsync(delegate(int val)
{
try
{
actionToPerformOnComplete(val);
}
finally
{
mre.Set();
}
});
mre.WaitOne();
}
关于c# - 是否可以同步调用异步调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5540669/