2

我在线程内设置引用变量时遇到问题。

错误:
“不能在匿名方法、lambda 表达式或查询表达式中使用 ref 或 out 参数‘输出’”

有没有办法让它工作或达到类似的效果?

public static void LoadThreaded<T>(string path, ref T output)
{
    ThreadStart threadStart = delegate
    {
        output = Loader<T>(path);
    };

    new Thread(threadStart).Start();
}
4

1 回答 1

3

output问题是该方法在设置变量之前返回(必须),因为它output是由不同的线程设置的。

这里最好的选择是使用 TPL 来修改它,即:

Task<T> LoadThreaded<T>(string path)
{
    return Task.Factory.StartNew( () => Loader<T>(path) );
}

这允许您启动此异步操作,并在完成时通过阻塞(调用output.Result)或添加任务延续来获取结果。

于 2012-08-03T20:38:56.760 回答