同步异步调用的方法?
问题描述:
假设您正在调用方法异步到UI线程上。同步异步调用的方法?
随着
UIDispatcher.BeginInvoke(new Action(_insert), DispatcherPriority.Normal, new object[] { })
你正在做的调用。从现在起,运行时环境决定何时执行该方法,而程序继续其“正常”执行路径。
我现在想知道是否有任何机制在返回时同步这些异步执行的方法?看起来,与使用多个线程时几乎有相同的问题。
但是被认为是线程之前被异步调用的返回方法?这似乎不是如此,因为通常的同步努力如
lock (someObject) { //... }
或使用专用锁似乎不起作用。
附录:
哪里出现这个问题我的实际情况如下:
的异步调用方法调用作为其最后声明静态类的return
方法。在这个return
方法里,一个常用的资源(一个List)必须被同步。考虑以下(概观样)代码剪断例举:
// A simple method that gets invoked asynchronously
public void _insert() {
// do some code
StaticClass.Returned();
}
public static StaticClass {
//...
public static void Returned() {
// use a shared resource !
}
}
答
既可以使用.NET的异步模式中,BackgroundWorker
或ManualResetEvent
'的BeginInvoke()'返回一个['DispatcherOperation'](http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcheroperation.aspx),让您等待异步调用完成并获取结果;你在找什么? – millimoose 2012-07-09 14:18:29
以及我需要一种方法来确保'Returned'方法内的代码被执行互斥。 DispatcherOperation对象似乎是有用的工具,但我认为它不会帮助我实现这一目标。 – 2012-07-09 14:22:56
相互排斥什么?您只能显示一个对共享资源的访问权限。我发现非常令人怀疑的是,'lock'将不起作用,如果没有,你可能有更多的任何对象的实例作为信号量 - 在调试器中检查。 – millimoose 2012-07-09 14:23:45