我正在使用C#开发Xamarin.Mac(Cocoa)。 我想等几秒钟,所以我使用Task.Delay开发了等待函数。
但重复Task.Delay会导致很大的延迟。 源代码↓
using System;
using System.Threading.Tasks;
using System.Threading;
using AppKit;
using Foundation;
namespace TaskDelayTest
{
public partial class ViewController : NSViewController
{
public ViewController(IntPtr handle) : base(handle)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
}
public override NSObject RepresentedObject
{
get
{
return base.RepresentedObject;
}
set
{
base.RepresentedObject = value;
}
}
async partial void Execute(AppKit.NSButton sender)
{
while (true)
{
int millisecond = 1000;
Console.WriteLine($"WaitTime : {millisecond}");
var startDate = DateTime.Now;
await Task.Delay(millisecond).ConfigureAwait(false);
var endDate = DateTime.Now;
var diff = (endDate - startDate);
Console.WriteLine($"WaitEnd : {endDate.ToString("yyyy/MM/dd HH:mm:ss.fff")}");
Console.WriteLine($"DiffTime : {diff.TotalMilliseconds}");
Console.WriteLine($"----------------------------------");
}
}
}
}
控制台结果: 。 。 (重复很多次) 。
等待时间:1000 WaitEnd:2018/02/01 01:00:25.784 DiffTime:1000.192
等待时间:1000 WaitEnd:2018/02/01 01:00:26.784 DiffTime:1000.193
等待时间:1000 WaitEnd:2018/02/01 01:00:27.785 DiffTime:1000.232
等待时间:1000 WaitEnd:2018/02/01 01:00:28.785 DiffTime:1000.462
等待时间:1000 WaitEnd:2018/02/01 01:00:39.785 DiffTime:10999.643
等待时间:1000 WaitEnd:2018/02/01 01:00:42.259 DiffTime:2473.116
等待时间:1000 WaitEnd:2018/02/01 01:00:43.582 DiffTime:1322.505
等待时间:1000 WaitEnd:2018/02/01 01:00:44.582 DiffTime:1000.173
等待时间:1000 WaitEnd:2018/02/01 01:00:45.582 DiffTime:1000.147
等待时间:1000 WaitEnd:2018/02/01 01:00:48.973 DiffTime:3389.941
等待时间:1000 WaitEnd:2018/02/01 01:00:49.973 DiffTime:1000.186
等待时间:1000 WaitEnd:2018/02/01 01:00:50.973 DiffTime:1000.186
等待时间:1000 WaitEnd:2018/02/01 01:00:52.083 DiffTime:1108.889
有时非常非常延迟。 这在Windows上没有发生。它只发生在Xamarin.Mac。
[编辑] 谢谢评论! 我必须开发async函数,因为它是cocoa应用程序。 如果我开发为非异步函数,它会锁定UI。