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

Call successively an async method and sync method

我有一个从 MySql 服务器查询数据并将它们写入 txt 文件的异步方法。 (我没有找到从异步方法 return 字符串的方法)。

然后,我必须调用一个读取 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 文件。之后sync方法会尝试读取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>

但这只会冻结程序...

那么我怎样才能连续调用一个异步方法然后调用一个同步方法呢? 否则,我如何 return 来自异步方法的字符串?

最好的方法通常是将执行调用的方法设为 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

这个link有详细的讨论

也看到这两个Whosebug问题

问题 One 和问题 Two