Как условно выполнить код асинхронно с помощью задач

У меня есть класс, отвечающий за получение ресурсов, который также кэширует их для быстрого доступа. Класс предоставляет асинхронный метод для получения ресурса:

public Task<object> GetResourceAsync(string resourceName)
{
    return Task.Factory.StartNew<object>(() =>
    {
        // look in cache

        // if not found, get from disk

        // return resource
    });
}

Тогда клиентский код выглядит следующим образом:

myResourceProvider.GetResourceAsync("myResource")
    .ContinueWith<object>(t => Console.WriteLine("Got resource " + t.Result.ToString()));

Таким образом, всегда используется фоновый поток. Однако я не хочу, чтобы код выполнялся асинхронно, если объект был найден в кеше. Если он был найден в кеше, я бы хотел немедленно вернуть ресурс и не использовать другой поток.

Спасибо.

13
задан Adi Lester 16 June 2015 в 16:35
поделиться