タスク ベースの非同期開発に重点を置いているため、Windows Phone 8 のサービス参照がタスク ベースの実装をサポートしていないことに驚きました。代わりに、「XYZCompleted」イベント ベースの非同期アプローチを使用します。
その結果、次のようなコードが必要になります: http://codepaste.net/fqyt47
public async Task<IEnumerable<MyService.Character>> GetCharactersAsync()
{
var _Task = new TaskCompletionSource<IEnumerable<MyService.Character>>();
var _Client = new MyService.ServiceClient();
_Client.GetCharactersCompleted += (s, e) =>
{
var _Characters = e.Result as IEnumerable<MyService.Character>;
if (e.Error != null && !_Task.TrySetException(e.Error))
System.Diagnostics.Debugger.Break();
else if (e.Cancelled && !_Task.TrySetCanceled())
System.Diagnostics.Debugger.Break();
else if (!_Task.TrySetResult(_Characters))
System.Diagnostics.Debugger.Break();
};
_Client.GetCharactersAsync();
return await _Task.Task;
}
しかし、これは間違っているように感じます。より優れた、よりエレガントなアプローチはありますか?