C# 同步异步调用的方法?

C# 同步异步调用的方法?,c#,asynchronous,synchronization,method-invocation,C#,Asynchronous,Synchronization,Method Invocation,假设您正在UI线程上异步调用方法 与 您正在进行调用。从现在起,运行时环境决定何时执行该方法,而程序继续其“正常”执行路径 我现在想知道是否有任何机制可以在这些异步执行的方法返回时同步它们?在使用多线程时,似乎存在着几乎相同的问题 但是,在线程之前异步调用的返回方法是否被视为线程?看起来不是这样,因为通常的同步工作 lock (someObject) { //... } 或者使用专用锁似乎不起作用 附录: 我的实际情况如下: 异步调用的方法作为其最后一条语句调用静态类的return方法。在此r

假设您正在UI线程上异步调用方法

您正在进行调用。从现在起,运行时环境决定何时执行该方法,而程序继续其“正常”执行路径

我现在想知道是否有任何机制可以在这些异步执行的方法返回时同步它们?在使用多线程时,似乎存在着几乎相同的问题

但是,在线程之前异步调用的返回方法是否被视为线程?看起来不是这样,因为通常的同步工作

lock (someObject) { //... }
或者使用专用锁似乎不起作用

附录:

我的实际情况如下:

异步调用的方法作为其最后一条语句调用静态类的
return
方法。在此
return
方法中,必须同步常用资源(列表)。考虑下面的(概览类)代码,以例示:

// 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对象似乎是一个有用的工具,但我不认为它能帮助我实现这一点。什么?您仅显示对共享资源的一次访问。我觉得很怀疑
lock
是否会完全不起作用,如果不起作用,您可能会有更多的对象实例用作信号量–请在调试器中检查这一点。对于
StaticClass
的所有
Returned()
调用,这是互斥的。假设我调用了1000次方法
\u insert()
,这意味着返回的
的执行完全混淆,具体取决于
insert()
的执行持续时间和执行异步调用的调度程序。您好。使用lock语句。它确实有效。也许你在别的地方出错了。是的,电话会混在一起。
// 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 !
   }

}