c# - Task.Run 取消
问题描述
在我更新 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);
但是当我在应用程序中点击加载屏幕时,它只会继续连接,并且似乎连接不会永远完成。请给我一些帮助!
解决方案
看来大家对我的问题不感兴趣,我自己解决了一些看起来不太聪明的方法。这是我的解决方案:实现一个任务方法
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);
这对我有用
推荐阅读
- python - REST API 的 Python 请求令牌不断返回 401 无法确定正确的令牌格式
- c++ - 在 C++ 中写入 IPC SHM 时无法读取完整的字符串
- javascript - 如何仅在状态更改后解决 Promise
- visual-studio - 在 Visual Studio 中编写 MFC/STL 程序需要做什么?
- java - android.content.ActivityNotFoundException:无法找到显式活动类{您是否在 AndroidManifest.xml 中声明了此活动?
- javascript - 我的 Angular 网站不会链接到我的 css 文件
- node.js - 接收文件时,在“完成”或“关闭”事件中重命名临时文件更好吗?
- android - 按下后退按钮导致的意外行为
- python - python中8个谜题的曼哈顿距离
- azureservicebus - Azure - 超出并发调用限制 - 服务总线