考虑这个iOS 6 API调用:
eventStore.RequestAccess(EKEntityType.Event, (granted, error) => {
if(granted)
{
events = this.GetLocalCalendarEvents(eventStore);
}});
我有一些代码可以访问日历并读取事件。在iOS5上,这只是有效但在iOS6上我必须首先要求访问,如果被授权,则开始阅读。 我想知道我是否能以某种方式将它包装成async / await的组合以隐藏丑陋的代表。
有什么想法吗?
答案 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;
}