关于Task异步执行任务

货郎大叔 2019-08-12 12:31:51

class Program
{
string s = "";
static void Main(string[] args)
{
Program p = new Program();
Task<string> task = Task.Run<string>(() => p.DoSomeThing());
Console.WriteLine("主线程继续执行");
Console.WriteLine(task.IsCompleted); //任务未完成,输出False
Console.ReadKey();
}
private string DoSomeThing()
{
Thread.Sleep(5000); //模拟耗时计算
s = "我好想熊俊";
Console.WriteLine(s); //5秒后输出
return s;
}
}

在使用Task的时候,会异步执行一段任务,主线程会继续执行。但是一直未发现Task有这么一个功能呢:就是Task任务执行完之后,另外执行一个回调,这应该是一个很常用的功能吧?或者也应该有一个任务完成之后的Completed事件吧?
...全文
284 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
github_36000833 2019-08-12
  • 打赏
  • 举报
回复
引用 3 楼 少年的风 的回复:
...
请教t,是代表什么


t就是那个task
task.ContinueWith((t) => ...
Nick大帅仔 2019-08-12
  • 打赏
  • 举报
回复
引用 2 楼 github_36000833 的回复:
Task.ContinueWith https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.tasks.task.continuewith

Task<string> task = Task.Run<string>(() => p.DoSomeThing());
task.ContinueWith((t) => 
{
    Console.WriteLine("任务完成。结果是:" +t.Result);
});
//...
请教t,是代表什么
github_36000833 2019-08-12
  • 打赏
  • 举报
回复
Task.ContinueWith
https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.tasks.task.continuewith


Task<string> task = Task.Run<string>(() => p.DoSomeThing());
task.ContinueWith((t) =>
{
Console.WriteLine("任务完成。结果是:" +t.Result);
});
//...
Nick大帅仔 2019-08-12
  • 打赏
  • 举报
回复
学到了(括号内凑字数)
wanghui0380 2019-08-12
  • 打赏
  • 举报
回复
await xxxx 和 xxx.ContinueWith 都是正解
savagelin 2019-08-12
  • 打赏
  • 举报
回复
Task task = Task.Factory.StartNew(() => { }) .ContinueWith(t => { });
XBodhi. 2019-08-12
  • 打赏
  • 举报
回复
ContinueWith
正怒月神 2019-08-12
  • 打赏
  • 举报
回复
通过async来标记方法可能是异步。 await就是一个线程回调的简写。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧