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 に答える