我在线程中设置引用变量时遇到问题。
错误:
“无法在内部使用ref或out参数'output' 匿名方法,lambda表达式或查询表达式“
有没有办法让它发挥作用或达到类似的效果?
public static void LoadThreaded<T>(string path, ref T output)
{
ThreadStart threadStart = delegate
{
output = Loader<T>(path);
};
new Thread(threadStart).Start();
}
答案 0 :(得分:3)
问题是该方法在设置output
变量之前返回(必要),因为output
由不同的线程设置。
这里最好的选择是使用TPL重做这一点,即:
Task<T> LoadThreaded<T>(string path)
{
return Task.Factory.StartNew( () => Loader<T>(path) );
}
这允许您启动此异步操作,并在完成时获得结果,方法是阻止(调用output.Result
)或添加任务延续。