同步异步调用的方法?

问题描述:

假设您正在调用方法异步到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 ! 
    } 

} 
+1

'的BeginInvoke()'返回一个['DispatcherOperation'](http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcheroperation.aspx),让您等待异步调用完成并获取结果;你在找什么? – millimoose 2012-07-09 14:18:29

+0

以及我需要一种方法来确保'Returned'方法内的代码被执行互斥。 DispatcherOperation对象似乎是有用的工具,但我认为它不会帮助我实现这一目标。 – 2012-07-09 14:22:56

+0

相互排斥什么?您只能显示一个对共享资源的访问权限。我发现非常令人怀疑的是,'lock'将不起作用,如果没有,你可能有更多的任何对象的实例作为信号量 - 在调试器中检查。 – millimoose 2012-07-09 14:23:45

既可以使用.NET的异步模式中,BackgroundWorkerManualResetEvent

http://msdn.microsoft.com/en-us/library/ms228969.aspx