3

考虑这个 iOS 6 API 调用:

eventStore.RequestAccess(EKEntityType.Event, (granted, error) => {
if(granted)
{
    events = this.GetLocalCalendarEvents(eventStore);
}});

我有一些代码可以访问日历并读取事件。在 iOS5 上,这只是工作,但在 iOS6 上,我必须先请求访问权限,如果获得访问权限,然后开始阅读。我想知道我是否可以以某种方式将其包装成 async/await 的组合来隐藏丑陋的委托。

有任何想法吗?

4

1 回答 1

5

您可以使用TaskCompletionSource

public Task<bool> DoSomethingAsync()
{
   var taskSource = new TaskCompletionSource<bool>();

   //Call some asynchronous Apple API
   NSSomeAppleApi.DoSomething(error =>
   {
      if (error != null)
         taskSource.SetException(new Exception(error.LocalizationDescription));
      else
         taskSource.SetResult(true);
   });

   return taskSource.Task;
}
于 2013-04-23T12:02:24.780 回答