如何链接独立的C#任务?
发布时间:2020-12-15 18:16:24 所属栏目:百科 来源:网络整理
导读:假设我有两个创建Task对象的独立异步函数(我无法控制): Task A();Task B(); 和其他一些非异步功能 void X(); 如何构建一个单独的任务链,按顺序执行所有这些,并允许附加继续(将在X之后执行)? 如果我这样做: Task Sequential(){ return A() .ContinueWith(t
假设我有两个创建Task对象的独立异步函数(我无法控制):
Task A(); Task B(); 和其他一些非异步功能 void X(); 如何构建一个单独的任务链,按顺序执行所有这些,并允许附加继续(将在X之后执行)? 如果我这样做: Task Sequential() { return A() .ContinueWith(t => { B(); }) .ContinueWith(t => { X(); }); } 这不起作用,因为B将启动一个新的任务链.如果B需要很长时间才能完成,则首先执行X(以及在返回的Task上,Sequential的调用者可能会继续执行任何其他操作).我需要X作为单个任务链中的最后一个元素,以B任务为先例. 如果我这样做: Task Sequential() { return A() .ContinueWith(t => { B().ContinueWith(t => { X(); }); }); } 这只能部分解决问题,因为即使A,B和X现在按顺序执行,如果调用者执行Sequential().ContinueWith,该延续将并行执行到B和X,而不是X. 解决方法
有没有理由不使用等待?例如,
async Task Sequential() { await A(); await B(); X(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |