gpt4 book ai didi

c# - 在 MVC Controller 操作中暂停

转载 作者:可可西里 更新时间:2023-11-01 03:13:38 25 4
gpt4 key购买 nike

我的一位同事编写了一些代码,这些代码在进行网络服务调用以检查值的状态之前基本上暂停 1 秒钟。此代码是在 MVC 4 应用程序的 Controller 操作中编写的。操作本身不是异步的。

var end = DateTime.Now.AddSeconds(25);
var tLocation = genHelper.GetLocation(tid);

while (!tLocation.IsFinished && DateTime.Compare(end, DateTime.Now) > 0)
{
var t = DateTime.Now.AddSeconds(1);
while (DateTime.Compare(t, DateTime.Now) > 0) continue;

// Make the webservice call so we can update the object which we are checking the status on
tLocation = genHelper.GetLocation(tid);
}

它似乎有效,但出于某种原因,我对它的实现有一些担忧。有没有更好的方法来实现这种延迟?

注意:

  1. 我们没有使用 .NET 4.5,也不会在此解决方案中对此进行更改
  2. SignalR 等 Javascript 脚本选项目前不是一个选项

我原以为这个问题是个不错的选择,但他没有接受并说这不是必需的,因为他所做的很有效。

How to put a task to sleep (or delay) in C# 4.0?

最佳答案

对于 MVC 和您的情况,这就足够了:

System.Threading.Thread.Sleep( 1000 );

做同样事情但开销更大的奇特方法:

Task.WaitAll( Task.Delay( 1000 ) );

更新:

快速而肮脏的性能测试:

class Program
{
static void Main()
{
DateTime now = DateTime.Now;

for( int i = 0; i < 10; ++i )
{
Task.WaitAll( Task.Delay( 1000 ) );
}

// result: 10012.57xx - 10013.57xx ms
Console.WriteLine( DateTime.Now.Subtract( now ).TotalMilliseconds );

now = DateTime.Now;

for( int i = 0; i < 10; ++i )
{
Thread.Sleep( 1000 );
}

// result: *always* 10001.57xx
Console.WriteLine( DateTime.Now.Subtract( now ).TotalMilliseconds );

Console.ReadLine();
}
}

关于c# - 在 MVC Controller 操作中暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21420404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com