重复Task.Delay会导致很大的延迟(仅限Xamarin.Mac)

时间:2018-01-31 16:12:02

标签: c# macos cocoa xamarin.mac

我正在使用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。

0 个答案:

没有答案