【发布时间】:2014-05-29 11:08:36
【问题描述】:
我已经为此任务设置了非常详细的示例,它可能在架构和一些 .NET 使用方面写得不好,但我才刚刚开始。
示例:http://pastebin.com/uhBGWC5e
这里有问题的代码是 Main 方法:
public static void Main (string[] args)
{
Log("Initializing...");
// Define listeners.
TcpListener s1 = CreateAndStartServer(IPAddress.Any, 1337);
TcpListener s2 = CreateAndStartServer(IPAddress.Any, 1338);
// Start async.
Task.Factory.StartNew(Accept, s1);
Task.Factory.StartNew(Accept, s2);
// Wait for connections only if servers active.
while (servers.Any(s => s.Key.Active))
{
// 100% usage.
}
Log("Nothing left to do, stopping service.");
}
更具体地说,“while”循环。
我在这里尝试做的是,我创建并启动一些 TCP 侦听器,并将它们添加到列表中。
然后,服务器本身有一个允许远程关闭的实现。
循环用于检查程序是否有工作要做。如果没有什么可做的,它应该退出。 (将来当我开始实际实现时,将会有一些 UDP 侦听器、任务队列、计时器等 TCP 侦听器,所有这些都将等待完成。
问题是,while 循环导致 100% 的使用 - 它提供了功能,但消耗太多。我可以将其替换为 Console.ReadKey 或 Console.ReadLine,但这不是我要寻找的行为。
还有哪些其他选项可以等待“无事可做”状态?
【问题讨论】:
标签: c# .net asynchronous mono .net-4.5