我有一个异步方法,用于从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>
但这只是冻结了程序......
那么如何连续调用异步方法和同步方法呢? 否则,我如何从异步方法返回一个字符串?
答案 0 :(得分:2)
最好的方法通常是让进行调用的方法为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();
...
});
答案 1 :(得分:0)