c# – 在循环中等待两件事?
发布时间:2020-12-15 23:30:42 所属栏目:百科 来源:网络整理
导读:我怎样才能同时等待两件或更多件事(不同类型)?就像在事件循环中一样: while(true) { Letter msg1 = await WaitForLetter(); //read msg1 and reply. SMS msg2 = await WaitForSMS(); //read msg2 and reply} 这看起来不对.这两条消息最终会互相阻塞? 解决
我怎样才能同时等待两件或更多件事(不同类型)?就像在事件循环中一样:
while(true) { Letter msg1 = await WaitForLetter(); //read msg1 and reply. SMS msg2 = await WaitForSMS(); //read msg2 and reply } 这看起来不对.这两条消息最终会互相阻塞? 解决方法
目前,您的代码将等待每个方法依次完成.如果要发送每条消息然后在最后等待两者,则可以使用
Task.WaitAll 方法(假设您的方法返回Task< T>对象.
while(true) { Task<Letter> msgTask1 = WaitForLetter(); Task<SMS> msgTask2 = WaitForSMS(); Task.WaitAll(msgTask1,msgTask2); } 然后,您可以使用Result属性获取每个任务的结果(再次假设您的方法返回Task< T>: Letter msg1 = msgTask1.Result; SMS msg2 = msgTask2.Result; 当然,这一切都假设WaitForLetter和WaitForSMS的实现是独立的,不会相互阻塞. 如果您只想等待任何任务完成,您可以使用`Task.WaitAny’到同一目的.这将返回已完成的任务的索引,以便您知道哪一个已完成. while(true) { Task<Letter> msgTask1 = WaitForLetter(); Task<SMS> msgTask2 = WaitForSMS(); var finishedTask = Task.WaitAny(msgTask1,msgTask2); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |