是否有机会将此原生iOS API调用“包装”为async / await?

时间:2013-04-23 08:36:38

标签: c# xamarin.ios async-await

考虑这个iOS 6 API调用:

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

我有一些代码可以访问日历并读取事件。在iOS5上,这只是有效但在iOS6上我必须首先要求访问,如果被授权,则开始阅读。 我想知道我是否能以某种方式将它包装成async / await的组合以隐藏丑陋的代表。

有什么想法吗?

1 个答案:

答案 0 :(得分: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;
}