当前,我们有一个C#窗口服务应用程序,可使用REST API及时从JIRA中提取数据。 在该应用程序中,我们有一种方法,可以通过将项目名称作为输入传递给方法来从JIRA中提取数据,并且它将返回一个布尔值标志以指示已成功提取项目。
到目前为止,通过在项目列表的for循环中调用JIRA方法,我们仅以同步方式从JIRA中提取了10个项目数据。
是否需要从JIRA中提取“ N”个项目的新要求?如果我们采用同步方式,则需要等待很长时间才能完成。但是通过以异步方式调用该方法,我们可以减少一些时间。
“ N”将在每个时间段增加。
我需要一个示例逻辑来应用相同的逻辑。
答案 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.
}
}