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

Kru*_*lur 3 c# xamarin.ios async-await

考虑这个iOS 6 API调用:

eventStore.RequestAccess(EKEntityType.Event, (granted, error) => {
if(granted)
{
    events = this.GetLocalCalendarEvents(eventStore);
}});
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

jon*_*ers 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;
}
Run Code Online (Sandbox Code Playgroud)