Task.Run取消

时间:2018-05-21 06:02:16

标签: c# xamarin

在我更新VS for mac之前我使用

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

连接ble设备

更新IDE出现错误"运算符'。'不能应用于void"

类型的操作数

我使用

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

而不是await device.Connect().ToTask(cancelSrc.Token); 但是当我在应用程序中点击加载屏幕时,除了保持连接之外什么也没做,似乎连接不会永远完成。 请给我一些帮助!

1 个答案:

答案 0 :(得分:0)

似乎每个人都对我的问题不感兴趣,我自己解决它看起来不那么聪明。 这是我的解决方案:实现一个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);

这对我有用