依次调用异步方法和同步方法
本文关键字:同步方法 异步方法 调用 | 更新日期: 2023-09-27 18:00:16
我有一个异步方法,可以从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>
但如果我这样运行代码,async方法将被跳过,并且不会写入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();
...
});
您可以通过应用async
await
方法使async
操作sync
这个链接有关于它的详细讨论
也可以看到这两个堆叠的问题
问题一和问题两个