我需要在控制台应用程序中运行多个异步任务,并在进一步处理之前等待它们全部完成.
那里有很多文章,但我读的越多越好.我已经阅读并理解了Task库的基本原理,但我显然错过了某处的链接.
我知道可以将任务链接起来,以便它们在另一个完成之后开始(这几乎是我读过的所有文章的场景),但我希望我的所有任务同时运行,我想知道一次他们都完成了.
对于这样的场景,最简单的实现是什么?
我目前正在编写用于个人用途的小型NodeJS CLI工具,我决定尝试使用Babel的ES7异步/等待功能.
它是一个网络工具,所以我显然有异步网络请求.我为request包写了一个简单的包装器:
export default function(options) {
return new Promise(function(resolve, reject) {
request({...options,
followAllRedirects: true,
headers: {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"
}
}, (error, response, body) => {
if(error) {
return reject(error);
}
resolve({response: response, body: body});
});
});
}
Run Code Online (Sandbox Code Playgroud)
现在我可以做点什么了
async function getGooglePage() {
try {
var r = await request({url: "http://google.com"});
console.log(r.body);
console.log("This will be printed in the end.")
} catch(e) {
console.log(e);
}
}
getGooglePage();
Run Code Online (Sandbox Code Playgroud)
现在我有一个问题:我在许多地方提出要求,我必须将所有这些功能标记为async,这是一个好习惯吗?我的意思是我的代码中的几乎所有函数都应该是async因为我需要 …
我是C#中异步方法的新手.我已经读过这些关键字async并await通过异步某些方法帮助使程序更具响应性.我有这个片段:
第一道路
public static void Main()
{
Console.WriteLine("Hello!! welcome to task application");
Console.ReadKey();
Task<string> ourtask = Task.Factory.StartNew<string>(() =>
{
return "Good Job";
});
ourtask.Wait();
Console.WriteLine(ourtask.Result);
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
第二种方式
public static void Main()
{
Launch();
}
public static async void Launch()
{
Console.WriteLine("Hello!! welcome to task application");
Console.ReadKey();
Console.WriteLine(await GetMessage());
Console.ReadKey();
}
public static Task<string> GetMessage()
{
return Task.Factory.StartNew<string>(() =>
{
return "Good Job";
});
}
Run Code Online (Sandbox Code Playgroud)
我需要知道 :
这两种实现之间是否有区别(在并行性的概念中)?
如果我可以创建任务并等待它完成,那么使用async和await关键字有什么好处?