我负责一个类,用于获取资源并缓存以便快速访问。该类提供了一个异步方法来获取资源:
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()));
这种方式总是使用后台线程。但是,如果在缓存中找到对象,则不希望代码异步运行。如果在缓存中找到它,我想立即返回资源而不必使用另一个线程。谢谢。
Task.Factory.StartNew
会使用TaskScheduler.Current
,在某些情况下,这可能会导致意外的行为,例如由 StartNew 启动的任务在 UI 线程上运行。如果您希望代码始终在后台线程上运行,则应始终传递TaskScheduler.Default
或使用Task.Run
(如果可用)。 - Scott Chamberlain