C# 启动线程 返回out
时间: 2024-10-05 09:01:46 浏览: 17
在C#中,如果你想从主线程启动一个新的工作线程并获取其结果(通常在异步操作中),同时还需要返回某个变量的值,可以使用`Task`类结合`TaskCompletionSource<T>`。这个组合允许你在主线程上启动任务,并通过`Task<T>.Result`属性等待任务完成。但是需要注意,`async`/`await`通常更推荐用于这样的场景,因为它提供了一种更简洁的编程模型。
下面是一个简单的例子,展示如何使用`TaskCompletionSource`启动一个新线程并返回`out`变量的结果:
```csharp
using System;
using System.Threading.Tasks;
public class MyTaskClass
{
public int MyOutput { get; set; }
public async Task StartThreadWithOutParameter()
{
var tcs = new TaskCompletionSource<int>();
// 在新线程中执行异步操作并设置结果
Task.Run(() =>
{
MyOutput = CalculateSomeValue(); // 假设这是一个计算过程
tcs.SetResult(MyOutput);
});
try
{
// 等待任务完成并获取结果
var result = await tcs.Task;
Console.WriteLine($"Got result: {result}");
}
catch (Exception ex)
{
Console.WriteLine($"Error occurred: {ex.Message}");
}
}
private int CalculateSomeValue() => /* Your calculation logic */;
}
public static void Main(string[] args)
{
var myTask = new MyTaskClass();
myTask.StartThreadWithOutParameter();
}
```
在这个示例中,`StartThreadWithOutParameter`方法启动了一个新的线程,并通过`TaskCompletionSource`将结果传递回主线程。当你看到"Got result"的信息时,就表示任务已成功完成并且结果已被获取。