依次调用异步方法和同步方法

本文关键字:同步方法 异步方法 调用 | 更新日期: 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

这个链接有关于它的详细讨论

也可以看到这两个堆叠的问题

问题一和问题两个