Можно ли заставить задачу выполнить синхронно, в текущем потоке?
То есть, возможно ли это, например, передав некоторый параметр StartNew()
, чтобы сделать этот код:
Task.Factory.StartNew(() => ThisShouldBeExecutedSynchronously());
ведут себя так:
ThisShouldBeExecutedSynchronously();
Фон:
У меня есть интерфейс под названием IThreads
:
public interface IThreads
{
Task<TRet> StartNew<TRet>(Func<TRet> func);
}
Я хотел бы иметь две реализации этого, одну нормальную, которая использует потоки:
public class Threads : IThreads
{
public Task<TRet> StartNew<TRet>(Func<TRet> func)
{
return Task.Factory.StartNew(func);
}
}
И тот, который не использует потоки (используется в некоторых сценариях тестирования):
public class NoThreading : IThreads
{
public Task<TRet> StartNew<TRet>(Func<TRet> func)
{
// What do I write here?
}
}
Я мог бы позволить версии NoThreading
просто вызвать func()
, но я хочу вернуть экземпляр Task<TRet>
, на котором я могу выполнять такие операции, как ContinueWith()
.