c#多线程如何从线程返回值
publicdelegatevoidResultCallback(inti);publicclassA//被调用函数所在的类{publicA(ResultCallback...
public delegate void ResultCallback(int i); public class A //被调用函数所在的类 { public A(ResultCallback callback) { this._result = callback; } private ResultCallback _result; private int i = 0; public void calledMethod() { i++; if (this._result != null) { this._result(i); } } } public class B //主线程 { public void hello(int i) { Console.WriteLine(i.ToString()); } public void testMethod() //运行的函数,启动多线程 { ResultCallback callback = new ResultCallback(hello); A temp = new A(callback); Thread t = new Thread(new ThreadStart(temp.calledMethod)); t.Start(); t.Join(); } }
展开
2013-09-13
展开全部
C# 5.0 新增的异步和等待关键字,使得异步操作变得严重简单和易于管理,我举个例子。
static async Task<int> DoCompt(int n)
{
int res = 1;
for (int i = 1; i <= n; i++)
{
res *= i;
}
return res;
}
调用的时候,只需要 :
int res = await DoCompt(999);
就可以从后台线程中得到返回值。
当然,另一种方法也是很简单,就是直接用Task类的Run方法异步执行任务,返回一个Task<TResult>,然后通过Task<TResult>的Result属性取得返回值,如:
static void Main(string[] args)
{
Console.WriteLine("开始计算,请稍候……");
// 直接用Task类
Task<long> result = Task.Run<long>(() =>
{
long tmp = 1L;
for (long i = 1L; i < 99999999L; i++)
{
tmp += i;
}
return tmp;
});
Console.WriteLine("计算完成,结果是{0}", result.Result);
Console.ReadLine();
}
static async Task<int> DoCompt(int n)
{
int res = 1;
for (int i = 1; i <= n; i++)
{
res *= i;
}
return res;
}
调用的时候,只需要 :
int res = await DoCompt(999);
就可以从后台线程中得到返回值。
当然,另一种方法也是很简单,就是直接用Task类的Run方法异步执行任务,返回一个Task<TResult>,然后通过Task<TResult>的Result属性取得返回值,如:
static void Main(string[] args)
{
Console.WriteLine("开始计算,请稍候……");
// 直接用Task类
Task<long> result = Task.Run<long>(() =>
{
long tmp = 1L;
for (long i = 1L; i < 99999999L; i++)
{
tmp += i;
}
return tmp;
});
Console.WriteLine("计算完成,结果是{0}", result.Result);
Console.ReadLine();
}
展开全部
C# 5.0 新增的异步和等待关键字,使得异步操作变得严重简单和易于管理,我举个例子。
static async Task<int> DoCompt(int n)
{
int res = 1;
for (int i = 1; i <= n; i++)
{
res *= i;
}
return res;
}
调用的时候,只需要 :
int res = await DoCompt(999);
就可以从后台线程中得到返回值。
当然,另一种方法也是很简单,就是直接用Task类的Run方法异步执行任务,返回一个Task<TResult>,然后通过Task<TResult>的Result属性取得返回值,如:
static void Main(string[] args)
{
Console.WriteLine("开始计算,请稍候……");
// 直接用Task类
Task<long> result = Task.Run<long>(() =>
{
long tmp = 1L;
for (long i = 1L; i < 99999999L; i++)
{
tmp += i;
}
return tmp;
});
Console.WriteLine("计算完成,结果是{0}", result.Result);
Console.ReadLine();
}
static async Task<int> DoCompt(int n)
{
int res = 1;
for (int i = 1; i <= n; i++)
{
res *= i;
}
return res;
}
调用的时候,只需要 :
int res = await DoCompt(999);
就可以从后台线程中得到返回值。
当然,另一种方法也是很简单,就是直接用Task类的Run方法异步执行任务,返回一个Task<TResult>,然后通过Task<TResult>的Result属性取得返回值,如:
static void Main(string[] args)
{
Console.WriteLine("开始计算,请稍候……");
// 直接用Task类
Task<long> result = Task.Run<long>(() =>
{
long tmp = 1L;
for (long i = 1L; i < 99999999L; i++)
{
tmp += i;
}
return tmp;
});
Console.WriteLine("计算完成,结果是{0}", result.Result);
Console.ReadLine();
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-13
展开全部
不能提交文字。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询