2012-11-01 8 views
5

WP8にasync/awaitパターンのサポートはありますか?Windows PhoneのWebアクセスAPIでAsyncが待機する

ウェブベースのAPIからXMLを取得する必要があります。WebClientまたはWebRequestはサポートしていません。

WP8 BCLでWebアクセスに使用できるasync/awaitをサポートするクラスはありますか?そうでなければ、私が使うことができる図書館はありますか?

これをサポートするためにラッパーを作成するのは難しくありませんが、これはSDKに含まれるようなものです。

答えて

16

WP8 BCLでWebアクセスに使用できるasync/awaitをサポートするクラスはありますか?

これはWP8 SDKのクローズドベータ中に提起された懸念事項です。そのため残念ながら、私はそれに答えることができません。

しかし、あなたが言及したように、あなた自身のラッパーを作ることはかなり簡単です。例えば

public static class Extensions 
{ 
    public static Task<string> DownloadStringTask(this WebClient webClient, Uri uri) 
    { 
     var tcs = new TaskCompletionSource<string>(); 

     webClient.DownloadStringCompleted += (s, e) => 
     { 
      if (e.Error != null) 
      { 
       tcs.SetException(e.Error); 
      } 
      else 
      { 
       tcs.SetResult(e.Result); 
      } 
     }; 

     webClient.DownloadStringAsync(uri); 

     return tcs.Task; 
    } 
} 
+0

なぜあなたは、独自のスレッドで非同期操作を置くでしょうか?なぜか分からないけど、これはひどいよ! –

+0

Task.Factory.StartNewを削除してください... –

+1

@ ToniPetrinaあなたは正しいです、ありがとうございます。一定。 –

0

はWP8で非同期/のawaitパターンのためのサポートはありますか?

Windows Phone 8に完全なC#5.0サポートがあります.WinRT APIは、主にasync/await(PeopleHubとの同期やI/O APIの使用など)に依存しています。

しかし、Silverlightと古い.NET APIは、WebClientのようなクラスに対してasync/awaitを使用するように更新されていません。

+0

言語サポートがありますが、KooKizはAPIサポートはないと主張しています。 –

+0

私の*全体*の投稿を読んだら、*いくつかの* APIの* APIサポートがあることがわかります。 –

8

Microsoft.Bcl.Async NuGet packageの一部として提供されているMicrosoft.Threading.Tasks.Extensions.Phone.dllには、一部のWP8がサポートされています(in this blog post)。

特に、WebClient.DownloadStringTaskAsyncを含みます。

0

WP8には、HttpClientが欠落しているなど、いくつかの制限があるネイティブの非同期/待機のサポートがあります。
WP7は非同期/のサポートを持っていたAsyncCTPを使用してVS2010で待っていますが、VS2012でそれはMicrosoft.Bcl.Asyncとして、最近再追加されました:
https://nuget.org/packages/Microsoft.Bcl.Async/1.0.12-beta

1

私は同じ問題を持っていたし、私はこれを発見し、私を助けた

private async Task<T> ExecuteAsync<T>(RestRequest request) 
    { 
     var tcs = new TaskCompletionSource<T>(); 
     _client.ExecuteAsync(request, resp => 
     { 
      var value = JsonConvert.DeserializeObject<T>(resp.Content); 
      if (value.ErrorCode > 0) 
      { 
       var ex = new ToodledoException(value.ErrorCode, value.ErrorDesc); 
       tcs.SetException(ex); 
      } 
      else 
       tcs.SetResult(value); 
     }); 
     return await tcs.Task; 
    } 

http://www.developer.nokia.com/Community/Wiki/Asynchronous_Programming_For_Windows_Phone_8 も私が参考にこの拡張機能を見つけhttp://nuget.org/packages/WP8AsyncWebClient/

関連する問題