簡體   English   中英

在MVC控制器操作中暫停

[英]Pausing within a MVC controller action

我的一位同事寫了一些代碼,這些代碼在進行Web服務調用以檢查值的狀態之前基本上暫停了1秒。 此代碼是在MVC 4應用程序的控制器操作中編寫的。 動作本身不是異步的。

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腳本選項目前不是一個選項

我原以為這個問題是一個很好的選擇,但是他並沒有接受它,並說這不是他所做的工作所必需的。

如何在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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM