依次调用异步方法和同步方法
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
我有一个从 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