日期:2014-05-17  浏览次数:21042 次

问一个也许很弱的问题,关于异步回调的
我想用同步的方式操作异步方法 .我能在一个函数中调用 异步方法,并且能在这个函数中得到这个异步方法执行的结果. 这样有没有可能实现?

比如 以下的伪代码
public int Callback()
{
  return  1;
}

public void s()
{
  //调用异步方法
  int i=  new AsyncCallback(Callback);
  // i 就是  Callback 返回的值 1;  
}

------解决方案--------------------
1 加全局变量标志完成未完成,调用方用循环DoEvents 判断标志等待回调完成
2 用ManualResetEvent WaitOne阻塞调用方,回调完成后ManualResetEvent Set
------解决方案--------------------
学习中...这个是个头疼的问题i
------解决方案--------------------

namespace AsyncTest
{
    class Program
    {
        public delegate int AsyncDelegate();
        static void Main(string[] args)
        {
            AsyncDelegate async = ()=>{return 1;};
            async.BeginInvoke(
                (
                ia=>{

                       int i = ((AsyncDelegate)ia.AsyncState).EndInvoke(ia);
                       Console.WriteLine(i);
                }
                        )
                ,async
                );

            Console.Read();
        }
    }
}


代码写得比较简单,能看懂吗?
------解决方案--------------------
不知楼主什么意思。如果你的Callback无须依赖异步执行方式,你直接这样就是了:
public void s()
{
  //同步调用方法
………………
//同步调用完成后,调用原本异步执行完成所需要调用的方法
  int i=  Callback;
}
但假如你的调用根本不能转变成同步调用方式,那就必须使用异步调用的方法。
------解决方案--------------------
这取决于你业务数据的实际处理流程,不是你主观想同想异的事情。业务确定了,该同就同,该异就异。
------解决方案--------------------
或许可参考