连续调用异步方法和同步方法

时间:2016-08-04 15:36:28

标签: c# asynchronous synchronous

我有一个异步方法,用于从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>

但这只是冻结了程序......

那么如何连续调用异步方法和同步方法呢? 否则,我如何从异步方法返回一个字符串?

2 个答案:

答案 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)

您可以应用async sync方法

进行async操作await

这个link有关于它的详细讨论

还可以看到这两个stackoverflow问题

问题One和问题 Two