Я использую библиотеку, которая принимает Task, но иногда мне приходится передавать только Task, который мне нужно преобразовать в Task. Какой вариант преобразования задачи будет более эффективным/рекомендуемым?
Вариант 1:
Task Convert(Task input)
{
if (input is Task converted)
return converted;
return input.ContinueWith(_ => 0, TaskContinuationOptions.ExecuteSynchronously);
}
Может быть, какой-нибудь вариант 3?
Я ищу ответ, который максимизирует совместимость. Это означает, помимо прочего:
Если выдается входная задача, преобразованная задача выдает то же исключение с той же трассировкой стека ( т.е. нет ненужной переноски с AggregatedException, нет другой трассировки стека).
Если задача ввода уже имеет какое-то устойчивое состояние (она уже завершена, неисправна и т. д.), тогда преобразованная задача должна иметь то же состояние.
Я не хочу добавлять ненужные переключатели контекста. Это означает, например, что если задача ввода завершается в определенном потоке, преобразованная задача должна завершиться как можно скорее в том же потоке. Вот почему я добавил TaskContinuationOptions.ExecuteSynchronous к варианту 2, но я не уверен, правильно ли это/нужно.
Библиотека может использовать ContinueWith, Подождите и т. д. Все, что будет работать, если входная задача уже введена, должно также работать и с преобразованной задачей. Также предположим, что библиотека может иметь зависимости от контекста синхронизации, контекста выполнения, планировщика задач и т. д.
Я использую библиотеку, которая принимает Task, но иногда мне приходится передавать только Task, который мне нужно преобразовать в Task. Какой вариант преобразования задачи будет более эффективным/рекомендуемым? Вариант 1: [code]Task Convert(Task input) { if (input is Task converted) return converted;
return converter(); } [/code] Вариант 2: [code]Task Convert(Task input) { if (input is Task converted) return converted;
return input.ContinueWith(_ => 0, TaskContinuationOptions.ExecuteSynchronously); } [/code] Может быть, какой-нибудь вариант 3? Я ищу ответ, который максимизирует совместимость. Это означает, помимо прочего: [list] [*]Если выдается входная задача, преобразованная задача выдает то же исключение с той же трассировкой стека ( т.е. нет ненужной переноски с AggregatedException, нет другой трассировки стека). [*]Если задача ввода уже имеет какое-то устойчивое состояние (она уже завершена, неисправна и т. д.), тогда преобразованная задача должна иметь то же состояние. [*]Я не хочу добавлять ненужные переключатели контекста. Это означает, например, что если задача ввода завершается в определенном потоке, преобразованная задача должна завершиться как можно скорее в том же потоке. Вот почему я добавил TaskContinuationOptions.ExecuteSynchronous к варианту 2, но я не уверен, правильно ли это/нужно. [*]Библиотека может использовать ContinueWith, Подождите и т. д. Все, что будет работать, если входная задача уже введена, должно также работать и с преобразованной задачей. Также предположим, что библиотека может иметь зависимости от контекста синхронизации, контекста выполнения, планировщика задач и т. д. [/list]
Я пытаюсь запустить несколько неасинхронных методов одновременно, как показано ниже. Все функции определены в том же классе, что и функции-члены.
private string getEstimatedWaypointStart()
{
return id-1 ;
}
Когда я запускаю приведенный ниже код как часть своего приложения, заменяя строку «var емкостьScenarios = debouncer.Result;» следующей строкой: «var емкостьScenarios = await debouncer;» приводит к значительному увеличению производительности. Разница...
У меня есть класс автокодировщика, в котором я пытаюсь передать кодировщику Normal_test_data с формой (2933314, 600). Я получаю входной тензор неудачного копирования из /job:localhost/replica:0/task:0/device:CPU:0 в...
После того, как задача уже выполнена, есть ли разница между await asyncio.Task и asyncio.Task.result()?
Единственная разница в следующий код показывает, как я читаю значение в задаче.
import asyncio
from asyncio import TaskGroup
После того, как задача уже выполнена, есть ли разница между await asyncio.Task и asyncio.Task.result()?
Единственная разница в следующий код показывает, как я читаю значение в задаче.
import asyncio
from asyncio import TaskGroup