当前位置: 首页 > 编程语言 > C#

C#LearningTutorial-HowtostopcallingIAsyncOperation-Share

时间:2023-04-10 23:15:45 C#

HowtostopcallingcauseIAsyncOperation?InmyapplicationInotifymultipledevicesIwanttocancelthecallifthedeviceisunreachableanddoesnotrespondwithinafewseconds.我的代码是:awaitcharacteristic0.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);经过一些研究后我发现通常可以传递CancelationToken(_ct)并执行此操作:首先创建一个包含调用的操作:IAsyncOperationoperation=characteristic0.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);thencreateataskwiththeCancellationToken:Tasktask=operation.AsTask(_ct);thenawaitit:GattCommunicationStatusstatus=awaittask;Now,eveniftheIsCancellationRequested-PropertyoftheCancellationTokenissettotrue.Thecallswon'tstop.And,thedevicealreadynotifiesafterthefirstline!Shouldn'tithappenafterawait?AmIdoingsomethingwrongwiththetoken,oristhisabiggerproblem?EDITAftertalkingwith@AndriiLitvinov,Iaddedmorecodetomyinitialdescriptionoftheproblem.这是整个方法:publicasyncTaskNotifyDevice(DeviceInformationDisplaydeviceInfo,CancellationToken_ct){try{BluetoothLEDevicedevice=awaitBluetoothLEDevice.FromIdAsync(deviceInfo.Id);service=device.GetGattService(newGuid(Service_UUID));characteristic0=service.GetCharacteristics(newGuid(Characteristic_0_UUID)).First();characteristic0.ValueChanged+=characteristic0ValueChanged;GattCommunicationStatusstatus=awaitcharacteristic0.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);_ct.Register(()=>{//试图以某种方式取消操作});IAsyncOperation操作=characteristic0.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);任务task=operation.AsTask(_ct);GattCommunicationStatusstatus_1=等待任务;如果(!elapsedTimeWatcher.IsRunning){elapsedTimeWatcher.Start();}else{elapsedTimeWatcher.Restart();}返回状态;}catch(OperationCanceledExceptione){returnGattCommunicationStatus.Unreachable;}catch(Exceptione){returnGattCommunicationStatus.Unreachable;根据您正在做的文档:尝试{...IAsyncOperationoperation=characteristic0.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);返回等待操作.AsTask(_ct);...}...这段代码应该注册到token并调用operation.Cancel()后面的场景你可以将token设置为较低的值以查看操作是否真的被取消了吗?执行该方法通常需要多长时间?尝试:CancellationTokenSourcects=newCancellationTokenSource(10);等待NotifyDevice(BLEDevice,cts.Token);甚至更低的值。以上就是C#学习教程:如何停止调用IAsyncOperation?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: