6

私は WinRT API を練習していましたが、あなたの助けが必要な問題が発生しました。

DataContractSerializerこのサイトを参照して試してみたい:

http://winrtstoragehelper.codeplex.com/

コード:

Stream inStream = Task.Run(() => readStream.OpenRead()).Result;

私はそれがあるべきだと思います(バグ?):

Stream inStream = await Task.Run(() => readStream.OpenRead());

しかし、最も奇妙なことは、私が使用するだけの場合です:

Stream inStream = readStream.OpenRead());

そして、このストリームを次の場所に渡します。

DataContractSerializer.WriteObject

API は永久に動かなくなります。

しかし、私が使用する場合:

Stream inStream = await Task.Run(() => readStream.OpenRead());

そして、このストリームを に渡すと、WriteObject正常に動作します。

ストリームを使用Task.Runしない場合にのみこの症状が発生する理由がわかりません。await

アドバイスや提案をしてもらえますか?


しかし

ストリーム inStream = readStream.OpenRead() メソッドは「async」という名前ではありませんでした

これを行うために意図的に Task を作成する必要がある理由がわかりません。

ありがとう。

4

1 に答える 1

4

答えはプロジェクトの説明にあります:

「ObjectStorageHelper は、 Metro スタイル アプリの非同期の *原則* を維持しながら、WinRT アプリケーションでのデータの保存を簡素化するジェネリック クラスです。」

WinRT でのすべてのファイル/IO 操作は本質的に非同期であるため、非同期でもあるメソッドを使用する必要があります (少なくとも結果を取得するには)。新しい "await" キーワードはこれを実現する 1 つの方法ですが、非同期操作の完了を処理するコールバック関数を明示的に割り当てることもできます。

于 2011-11-14T10:25:37.817 に答える