如何等待异步任务方法完成之前再次调用它?



我在for循环中调用Async Task方法,像这样:-

for(int event_dbID = get_maxID_old + 1 ; event_dbID <= get_maxID_new ; event_dbID++)
{
SqlCommand command3 = new SqlCommand(queryString3, connection);
command3.Parameters.Add("@ID", (int)event_dbID);
SqlDataReader reader3 = command3.ExecuteReader();
while (reader3.Read())
{                   
c8y_Event_MSG = Convert.ToString(reader3[0]);
c8y_pushEvent(c8y_Event_MSG); //calling async method     
}
reader3.Close();
}

for循环可以根据情况运行数百次迭代。

JSON String作为参数传递给async Task方法。异步任务方法看起来像这样:-

public async Task c8y_pushEvent(string Event_MSG)
{
//Doing bunch of operations on Event_MSG
using (var client = new HttpClient())
{
//Making a get request using a value from a key in Event_MSG
//Storing response of get request
HttpResponseMessage get_response = await client.GetAsync("https://myurl.com/"+controllerName);
var get_responseString = await get_response.Content.ReadAsStringAsync();
//Doing bunch of operations on get_responseString
//Making a Post request passing this get_responseString as Content-Message in stringContent
HttpResponseMessage response = await client.PostAsync("https://myurl.com", stringContent);
var responseString = await response.Content.ReadAsStringAsync();
}
}

现在发生的情况是,所有Post请求都成功了,但是它们的顺序不正确。

例如。如果通过Post请求接收到的数据序列应该看起来像:1,2,3,4,5它以随机顺序出现,如:2,3,1,5,4

等待Async方法完全完成,然后在c8y_pushEvent(c8y_Event_MSG);中再次调用它会产生差异吗?如果是,那么如何等待它一次完成一个字符串JSON的执行,然后传递下一个字符串JSON?

建议这样做吗?会引起什么问题吗?

你需要等待这个方法:

await c8y_pushEvent(c8y_Event_MSG); //calling async method

如果要使用await关键字,需要在父方法中添加async关键字。

但是如果你想同步运行异步方法,这是一个不同的问题。在SO上已经有答案了。

相关内容

  • 没有找到相关文章

最新更新