先后调用异步方法和同步方法
问题描述:
我有一个异步方法,它从MySql服务器查询数据并将它们写入txt文件中。 (我没有找到从异步方法返回字符串的方法)。先后调用异步方法和同步方法
然后,我必须调用一个简单的同步方法来读取txt文件。
我的代码如下所示:
var sql = new ProjetTN.Class.SQLite();
sql.GetSens("101"); //<--- This is an async method
var SensItems = sql.ListeSens(); //<--- This method return a List<string>
但如果我喜欢运行的代码,异步方法将被跳过,不会写txt文件。之后,同步方法将尝试读取txt文件,但他不存在,所以程序将崩溃。
在我的研究,我发现,我需要等待异步方法是完整的,所以我尝试:
public void CallGetSens()
{
var task = GetSens("101");
task.Wait();
}
当我调用的方法:
var sql = new ProjetTN.Class.SQLite();
sql.CallGetSens(); //<--- This is an async method
var SensItems = sql.ListeSens(); //<--- This method return a List<string>
但这只是冻结程序...
那么我怎么能连续调用异步方法然后同步方法? 否则,我怎样才能从异步方法返回一个字符串?
答
最好的办法通常是使正在做的调用方法是async
这样就可以await
异步调用:
async Task MyMethod()
{
var sql = new ProjetTN.Class.SQLite();
await sql.CallGetSens();
var SensItems = sql.ListeSens();
...
}
如果不会出于某种原因,你可以使用.ContinueWith()
来使数据从文本文件装载发生后,文件已保存:
var sql = new ProjetTN.Class.SQLite();
sql.CallGetSens().ContinueWith(t => {
var SensItems = sql.ListeSens();
...
});
我建议你做的异步/ AWAIT一些阅读。 –
@CharlesMager你对我的建议有什么看法? :) –
对于初学者:[使用异步和等待的异步编程](https://msdn.microsoft.com/en-us/library/mt674882.aspx)。另外[控制异步程序中的流程](https://msdn.microsoft.com/zh-cn/library/mt674892.aspx) – Igor