当前位置: 首页 > 编程语言 > C#

使用Task.Delay()的代价是什么?使用Task.Delay()共享

时间:2023-04-11 03:29:03 C#

的成本是多少?我正在考虑在具有事件驱动逻辑的MMO游戏服务器中使用C#异步等待。让我们假设有数千个实体在已知的持续时间内做一些工作。所以我想为每个游戏对象调用Time.Delay()。(这是对每个游戏对象进行一些Update()调用的通常无限循环的对立面。)有谁知道Task.Delay()是如何实现的?它使用定时器吗?系统资源重吗?是否有可能同时产生数千个Task.Delay()调用?Task.Delay实现如下:publicstaticTaskDelay(intmillisecondsDelay,CancellationTokencancellationToken){//错误检查Task.DelayPromisedelayPromise=newTask.DelayPromise(cancellationToken);如果(cancellationToken.CanBeCanceled)delayPromise.Registration=cancellationToken.InternationalRegistration(ECAction)(state=>((Task.DelayPromise)state).Complete()),(object)delayPromise);如果(毫秒延迟!=-1){delayPromise。Timer=newTimer((TimerCallback)(state=>((Task.DelayPromise)state).Complete()),(object)delayPromise,millisecondsDelay,-1);delayPromise.Timer.KeepRootedWhileScheduled();}返回(任务)延迟承诺;它肯定使用计时器。它们在名为DelayPromise的类中使用。这是实现:privatesealedclassDelayPromise:Task{internalreadonlyCancellationTokenToken;内部CancellationTokenRegistration注册;内部定时器定时器;内部DelayPromise(CancellationTokentoken){this.Token=token;}internalvoidComplete(){if(!(Token.IsCancellationRequested?this.TrySetCanceled(this.Token):this.TrySetResult(newVoidTaskResult())))返回;如果(this.Timer!=null)this.Timer.Dispose();this.Registration.Dispose();它确实使用了一个计时器,但这对我来说似乎不是一个问题。定时器只是回调complete方法,它所做的是检查是否被取消,如果被取消,否则只返回一个结果。对我来说似乎很好。以上是C#学习教程:WhatisthecostofusingTask.Delay()?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: