【问题标题】:Wait IAsyncResult function until complete等待 IAsyncResult 函数直到完成
【发布时间】:2015-05-22 07:51:01
【问题描述】:

我需要创建等待 IAsycnResult 方法完成的机制。 我怎样才能做到这一点?

IAsyncResult result = _contactGroupServices.BeginDeleteContact(
  contactToRemove.Uri,
  ar =>
      {
      try
         {
           _contactGroupServices.EndDeleteContact(ar);
         }
      catch (RealTimeException rtex)
         {
            Console.WriteLine(rtex);
         }
      },
      null ); 

【问题讨论】:

  • 你可以通过 .Result 或 .Wait() 完成你的方法,或者如果你在异步方法中使用 await
  • 这个?结果.AsyncWaitHandle.WaitOne();
  • 我不在异步方法中。不然怎么办?
  • result.AsyncWaitHandle.WaitOne() 没有帮助我。我试过了。
  • @FatihÜstdağ 从我的回答中查看代码。希望对你有用

标签: c# .net asynchronous async-await iasyncresult


【解决方案1】:

任务工厂有一个专门的方法:Task.Factory.FromAsync

var task = Task.Factory.FromAsync(
    contactGroupServices.BeginDeleteContact(contactToRemove.Uri),
    ar =>
    {
        try
        {
            _contactGroupServices.EndDeleteContact(ar);
        }
        catch (RealTimeException rtex)
        {
            Console.WriteLine(rtex);
        }
    });

您可以通过调用task.Wait 阻塞直到它完成,但在大多数情况下会死锁(例如,如果从 UI 线程调用)。

您可能希望将其放在异步方法中:

async Task M()
{
    ...
    await Task.Factory.FromAsync(
        contactGroupServices.BeginDeleteContact(contactToRemove.Uri),
        ar =>
        {
            try
            {
                _contactGroupServices.EndDeleteContact(ar);
            }
            catch (RealTimeException rtex)
            {
                Console.WriteLine(rtex);
            }
        });
    ...
}

【讨论】:

    【解决方案2】:

    我不知道这种方法 _contactGroupServices.BeginDeleteContact 的目标是什么。但是让我们尝试为它编写模板

    Func<object> doWork = () =>
    {
        return _contactGroupServices.BeginDeleteContact(<your parameters>)
    
    };
    
    
    AsyncCallback onWorkDone = (ar) =>
    {
        //work done implementation
    };
    
    IAsyncResult asyncResult = doWork.BeginInvoke(onWorkDone, null); 
    
    asyncResult.AsyncWaitHandle.WaitOne();
    
    var result = doWork.EndInvoke(asyncResult);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-02
      • 2019-05-11
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多