Есть ли реализация какого нибудь управляемого асинхронного потока?
Так запустите поток и выполняйте в нем цикличную операцию.
1. Если надо завершить проверяйте переменнуюwhile (isActiveThread)
{
 // действие
}
2. Захотели остановить, введите Event ( к примеру ManualResetEvent ).event.WaitOne(); // Будет ждать пока вы его не взведете в сигнальное состояние
или со временемevent.WaitOne(1000); // Ждем сигнального или 1 сек.
Если используете TPL то например так можно.async Task Foo() {}

async Task Foo2()
{
	var task = Foo();
	
	if (await Task.WhenAny(task, Task.Delay(1000)) == task)
	{
		// задача успела выполниться за таймаут
	}
	else
	{
		// задача не успела выполниться за таймаут
	}
}