如何异步调用单个方法“ n”次?

时间:2019-04-26 11:29:24

标签: c# asynchronous

当前,我们有一个C#窗口服务应用程序,可使用REST API及时从JIRA中提取数据。 在该应用程序中,我们有一种方法,可以通过将项目名称作为输入传递给方法来从JIRA中提取数据,并且它将返回一个布尔值标志以指示已成功提取项目。

到目前为止,通过在项目列表的for循环中调用JIRA方法,我们仅以同步方式从JIRA中提取了10个项目数据。

是否需要从JIRA中提取“ N”个项目的新要求?如果我们采用同步方式,则需要等待很长时间才能完成。但是通过以异步方式调用该方法,我们可以减少一些时间。

“ N”将在每个时间段增加。

我需要一个示例逻辑来应用相同的逻辑。

1 个答案:

答案 0 :(得分:0)

您可以利用C#语言的异步功能。这样,您不必产生任何线程,但是可以立即执行对JIRA api的调用,而不必立即等待对JIRA的调用。示例:

public async Task FetchProjects(params string[] projects)
{
    var tasks = new List<Task<bool>>();
    foreach (var project in projects)
    {
        // Calling the api, but not awaiting the call just yet.
        tasks.Add(FetchProjectInfo(project));
    }

    // awaiting all api calls here.
    await Task.WhenAll(tasks);

    // You might want to check whether all calls returned true here.
}

// This would be your existing method.
private async Task<bool> FetchProjectInfo(string project)
{
    string url = CreateUrl(project);

    // TODO: Include error handling 
    // (and you should actually reuse the HttpClient between calls)
    using (var client = new HttpClient())
    using (var response = await client.GetAsync(url))
    {
        // TODO: Do something with response.
    }
}