繁体   English   中英

Task.Run取消

[英]Task.Run cancellation

在我为Mac更新VS之前

using (var cancelSrc = new CancellationTokenSource())
                    {
                        using (UserDialogs.Instance.Loading("Connecting", cancelSrc.Cancel, "Cancel"))
                        {
                            await device.Connect().ToTask(cancelSrc.Token);
                        }
                    }

连接ble设备

更新后的IDE出现错误“ operator'”。 不能应用于void类型的操作数”

我用的

await Task.Run(() => 
                            {
                                cancelSrc.Token.ThrowIfCancellationRequested();
                                while (!cancelSrc.Token.IsCancellationRequested)
                                {
                                    device.Connect();
                                }
                            },cancelSrc.Token);

而不是await device.Connect().ToTask(cancelSrc.Token); 但是当我在应用程序的加载屏幕中轻按时,它什么都没有做,而是继续保持连接,并且似乎连接不会永远结束。 请给我一些帮助!

似乎每个人都对我的问题不感兴趣,我以某种不太聪明的方式自己解决了这个问题。 这是我的解决方案:实现Task方法

public async Task ConnectDevice(IDevice device,CancellationTokenSource cancelSrc)
    {
        await Task.Run(() =>
        {
            device.Connect();
            while ((cancelSrc.Token.IsCancellationRequested==false)&&(device.IsConnected() == false))
            {

            }

        }, cancelSrc.Token);
    }

当我想连接时,我会这样:

await ConnectDevice(device, cancelSrc);

这对我有用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM