Task.whenany () (с задачи.delay ()) не "Timing Out"C#

Место общения программистов C#
Ответить
Anonymous
 Task.whenany () (с задачи.delay ()) не "Timing Out"

Сообщение Anonymous »

Я обнаружил, что асинкоперация, кажется, висит (я спросил о конкретном подвеске в другом вопросе), поэтому я хотел добавить «тайм -аут», поэтому я реализовал то, что, как мне кажется, является довольно стандартным, когда () шаблон (см. Ниже).
Однако я обнаружил, что на некоторых компьютерах (!) Задача висит, но через 20 секунд Task.delay () не завершен (под которым я имею в виду, что он не переходит в раздел «/Код»>, он просто висит Форвер. На планшете с Windows 10 22H2 это не так! < /p>

Код: Выделить всё

GattDeviceServicesResult services = null;
var task = bleDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached).AsTask();

if (await Task.WhenAny(task, Task.Delay(20000)) == task)
{

Console.WriteLine($"Found Services for device:")

services = task.Result;
if (services.Services != null)
{
foreach (var service in services.Services)
{
Console.WriteLine($"Service: {service.Uuid}");
}
}

}
else
{
Console.WriteLine("Timed Out while while getting service list.");
}
< /code>
AsTask()
определяется следующим образом:

Код: Выделить всё

public static Task AsTask(this IAsyncOperation operation)
{
// Create task completion result.
var tcs = new TaskCompletionSource();

// When the operation is completed...
operation.Completed += delegate
{
switch(operation.Status)
{
case AsyncStatus.Completed:
tcs.TrySetResult(operation.GetResults());
break;
case AsyncStatus.Error:
tcs.TrySetException(operation.ErrorCode);
break;
case AsyncStatus.Canceled:
tcs.SetCanceled();
break;

}
};

return tcs.Task;
}
< /code>
... but it's the same if I used the AsTask()
определено в system.runtime.windowsruntime .

Подробнее здесь: https://stackoverflow.com/questions/794 ... timing-out
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»