01. 多线程Task做延迟操作

1.异步执行,不会阻塞当前线程

public CompassCalibrationTopIndicatorView()
        {
            InitializeComponent();
            BindingContext = Ioc.ViewModelLocator.GetViewModel<CompassCalibrationTopInicatorViewModel>();

            Task.Run(async () =>
            {
                await Task.Delay(3000);
                Device.BeginInvokeOnMainThread(() =>
                {
                    Button1.Status = EHButtonStatus.Selected;
                });
            });
        }

2. 同步等待,当前线程会等三秒完后继续往下执行

            var task = Task.Delay(3000);
            task.Wait();
            Button1.Status = EHButtonStatus.Selected;

3. 异步,不阻塞当前线程的执行,

Task.Delay(3000).ContinueWith((b) =>
                    {
                        Device.BeginInvokeOnMainThread(() =>
                        {
                            TriangleImage.TranslateTo(viewModel.UiModel.IndicatorWidth * 0.5, 0);
                        });
                    });

4. await实现延迟操作

 protected override void OnAppearing()
        {
            base.OnAppearing();

            HidePopup();
        }

        private async void HidePopup()
        {
            await Task.Delay(4000);
            await PopupNavigation.RemovePageAsync(this);
        }

连续嵌套延迟

 Task.Delay(2000).ContinueWith(_ =>
            {
               //do something
            }).ContinueWith(async _ =>
            {
                await Task.Delay(2000);
               //do something

            });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第三章 Java内存模型 3.1 Java内存模型的基础 通信在共享内存的模型里,通过写-读内存中的公共状态进行隐...
    泽毛阅读 4,382评论 2 22
  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 2,831评论 1 17
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,388评论 25 708
  • 一壶青花,清水蒹葭。 烟景细尘,一点朱砂。 春秋韶华,牡丹亭花。 风醇柔火,锦鲤软纱。 瓶身炼化,清雅潇洒。 炉火...
    狮子座四叶草_77阅读 732评论 0 2
  • 王子,我亲爱的儿子: 好久没有写信了,提起笔,往日的点点滴滴涌上心头,我思绪万千。 自你呱呱坠地的那一天起,这个家...
    清林0阅读 546评论 0 0