【发布时间】:2015-10-23 11:02:26
【问题描述】:
这样如果任务还没有被另一个线程启动,任务就会启动。
例如
private readonly object syncObj = new object();
private Task<Resource> task;
public Resource GetResource()
{
lock (syncObj)
{
if (task == null)
task = Task.Factory.StartNew<Resource>(CreateResource);
}
task.Wait();
return task.Result;
}
private Resource CreateResource()
{
//do something
}
有没有办法在不使用lock 的情况下重写GetResource(),使其保持线程安全?
【问题讨论】:
-
你可以使用
Lazy<T>。 -
您使用的是什么框架版本? .NET 4.5 中不需要此代码
标签: c# .net locking task-parallel-library task