1

Windows 8 Metro スタイル アプリケーションを開発しようとしています。次のユースケースがあります。

async void dofileop()
{
  await writedatatofile();          
  printdata();
}

IAsyncAction writedatatofile()
{
  readdatafromfile();
  //play with data
  return FIleIO.WriteData();
}

async void readdatafromfile()
{
    await FileIO.readdata();
    operation1
    operation 2
}

ここで、 を実行した後await FileIO.readdata();、コントロールはすぐに、操作 1 と操作 2 の代わりに // データで再生します。実行後printdata()、制御は操作 1 と操作 2 に戻ります。

このような問題を解決するにはどうすればよいですか?

4

1 に答える 1

2

ユースケースに従って、制御が writedatatofile() に戻る前に、readdatafromfile() 内のすべてのステートメントを実行する必要があります。

それはメソッドが機能するasync方法ではありません。async/ awaitintroを読みたいと思うかもしれません。メソッドは、何らかの操作が完了していない場合 (例: ) async、呼び出し元に戻ります。awaitFileIO.readdata

原則として、次のように、asyncメソッドを returnTaskにしてから、他のメソッドでawaitそれらを返すようにします。Taskasync

async Task dofileop()
{
  await writedatatofile();          
  printdata();
}

async Task writedatatofile()
{
  await readdatafromfile();
  //play with data
  await FIleIO.WriteData();
}

async Task readdatafromfile()
{
  await FileIO.readdata();
  operation1
  operation 2
}

また、私の制約は、IAsyncAction writedatatofile() 関数の構文を変更しないことです。

それはもう少し複雑です:

async Task dofileop()
{
  await writedatatofileAsync();          
  printdata();
}

IAsyncAction writedatatofile()
{
  return writedatatofileAsync().AsAsyncAction();
}

async Task writedatatofileAsync()
{
  await readdatafromfile();
  //play with data
  await FIleIO.WriteData();
}

async Task readdatafromfile()
{
  await FileIO.readdata();
  operation1
  operation 2
}
于 2012-08-30T12:30:48.113 に答える