【发布时间】:2013-06-27 01:03:23
【问题描述】:
我正在考虑在具有事件驱动逻辑的 MMO 游戏服务器中使用 C# async\await。让我们假设有数千个实体在做一些已知持续时间的工作。所以我想为我的每个游戏对象调用Time.Delay()。 (这是与普通无限循环相反的方法,每个游戏对象都有一些 Update() 调用。)
有人知道Task.Delay() 是如何实现的吗?
是否使用计时器?是否占用系统资源?
可以同时产生数千个Task.Delay() 调用吗?
【问题讨论】:
-
@ColeJohnson 因为
Thread.Sleep不是async? -
Task.Delay 是什么?那没有意义。如果我想延迟一个线程,我现在就想要它,而不是产生另一个线程来告诉一个停止。
-
@Cole 重点是让线程在恢复之前等待一段时间。重点不是延迟线程。
-
@ColeJohnson 等待/异步的东西会导致对
Task.Delay()的调用似乎立即从调用它的代码返回,并且延迟结束后的代码将在延迟结束后恢复。它是非阻塞的(只要调用它的方法本身是async)。 -
@It'sNotALie。因为使用 0 或 1 以外的参数调用
Thread.Sleep总是一个很大的设计问题。
标签: c# multithreading asynchronous async-await