c#-异步编程基础-使用Awaiter
作者:互联网
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
// c#-异步编程基础-使用Awaiter
namespace yibBianchengJichu
{
class Program
{
void traceThreadAndTask(string info)
{
string taskInfo = Task.CurrentId == null ? "no task" : "task" + Task.CurrentId;
Console.WriteLine($"{info} in thread {Thread.CurrentThread.ManagedThreadId} " + $"and {taskInfo}");
}
string Greeting(string name)
{
traceThreadAndTask($"running {nameof(Greeting)}");
Task.Delay(3000).Wait();
return $"hello,{name}";
}
Task<string> GreetingAsync(string name) => Task.Run<string>(() => {
traceThreadAndTask($"running {nameof(GreetingAsync)}");
return Greeting(name);
});
async void CallWhithAsync()
{
traceThreadAndTask($"started{nameof(CallWhithAsync)}");
string result = await GreetingAsync("stephanie");
Console.WriteLine(result);
traceThreadAndTask($"ended {nameof(CallWhithAsync)}");
}
async void CallWhithSsync2()
{
traceThreadAndTask($"started{nameof(CallWhithSsync2)}");
Console.WriteLine(await GreetingAsync("stephanie2"));
traceThreadAndTask($"ended {nameof(CallWhithSsync2)}");
}
// 使用Awaiter
void CallerWithAwaiter()
{
traceThreadAndTask($"started{nameof(CallerWithAwaiter)}");
TaskAwaiter<string> awaiter = GreetingAsync("Matthias").GetAwaiter();
awaiter.OnCompleted(OnCompleteAwaiter);
void OnCompleteAwaiter()
{
Console.WriteLine(awaiter.GetResult());
traceThreadAndTask($"started{nameof(CallerWithAwaiter)}");
}
}
// 延续任务
void CallerWithContinuationTask()
{
traceThreadAndTask($"started{nameof(CallerWithContinuationTask)}");
var t1 = GreetingAsync("stephanie");
t1.ContinueWith(t =>
{
string result = t.Result;
Console.WriteLine(result);
traceThreadAndTask($"ended {nameof(CallerWithContinuationTask)}");
});
}
// 创建任务-调用异步方法-使用Awaiter-延续任务
void main()
{
//traceThreadAndTask("test");
//同步任务
//Greeting("test");
//CallWhithAsync();
//CallWhithSsync2();
CallerWithAwaiter();
//CallerWithContinuationTask();
Thread.Sleep(8000);
}
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Program p = new Program();
p.main();
}
}
}
函数名 | 线程id | 任务id |
CallerWithAwaiter | 1 | 无 |
GreetingAsync | 4 | 1 |
Greeting | 4 | 1 |
CallerWithAwaiter | 4 | 无 |
标签:异步,traceThreadAndTask,nameof,string,c#,void,System,Awaiter,using 来源: https://blog.csdn.net/xie__jin__cheng/article/details/96098990