等待 IAsyncResult 函数直至完成

Fat*_*dağ 3 .net c# asynchronous iasyncresult async-await

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

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

Pau*_*ado 5

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

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

您可以通过调用 来阻止直到完成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);
            }
        });
    ...
}
Run Code Online (Sandbox Code Playgroud)