Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套等待操作在..NET 4.5中失败_C#_.net 4.5 - Fatal编程技术网

C# 嵌套等待操作在..NET 4.5中失败

C# 嵌套等待操作在..NET 4.5中失败,c#,.net-4.5,C#,.net 4.5,我正在尝试开发一个Windows8 Metro风格的应用程序。我得到了以下用例: async void dofileop() { await writedatatofile(); printdata(); } IAsyncAction writedatatofile() { readdatafromfile(); //play with data return FIleIO.WriteData(); } async void readdatafromf

我正在尝试开发一个Windows8 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
}
在这里执行
后等待FileIO.readdata(),控件将立即//播放数据,而不是操作1和操作2。执行
printdata()
后,控件将返回到操作1和操作2

如何解决此类问题


根据用例,readdatafromfile()中的所有语句都应该在控件返回WriteDataTable()之前执行

这不是
async
方法的工作方式。你可能想读我的书。
async
方法在等待未完成的某个操作(例如,
FileIO.readdata
)时,将返回调用方

一般来说,让您的
async
方法返回
Task
,然后在其他
async
方法中等待那些
Task
,如下所示:

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 WriteDataofile()函数的语法

这只是有点复杂:

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
}

有点混乱,你们能澄清一点吗?我正试图读取文件的内容并搜索特定的字符串。如果找到该字符串,我将修改该字符串并将数据写回文件。根据用例,应在控件返回WriteDataTable()之前执行readdatafromfile()中的所有语句。但实际上,在执行wait FileIO.readdata()之后,我会立即执行wait FileIO.readdata();语句,控件将返回WriteDataTable(),而不执行operation1和operation 2语句。此外,我的约束条件是不更改IAsyncation WriteDataTable()函数的语法。