我的一位同事写了一些代码,这些代码在进行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);
}
Run Code Online (Sandbox Code Playgroud)
它似乎有效,但由于某种原因,我对它的实现有一些担忧.是否有更好的方法来延迟?
注意:
我原以为这个问题是一个很好的选择,但是他并没有接受它,并说这不是他所做的工作所必需的.
Moh*_*oho 36
对于MVC和您的情况,这就足够了:
System.Threading.Thread.Sleep( 1000 );
Run Code Online (Sandbox Code Playgroud)
一种奇特的方式来做同样的事情,但有更多的开销:
Task.WaitAll( Task.Delay( 1000 ) );
Run Code Online (Sandbox Code Playgroud)
更新:
快速而肮脏的性能测试:
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();
}
}
Run Code Online (Sandbox Code Playgroud)