一、async/await使用场景
同步情况下,实现异步
二、async/await使用和返回值
async可以单独使用,但是await必须放置在Task前面,而且必须配合async使用
async/await,await将原本没有返回值,返回void或者Task,原本返回X类型的返回Task,一般来说尽量不要在返回void,因为不能await
三、Demo解析
代码如下(示例):
namespace AsyncAwait
{
class Program
{
static void Main(string[] args)
{
Test t = new Test();
//t.NoReturn();
t.ReturnTask();
Console.WriteLine("Hello World!");
Console.Read();
}
}
public class Test
{
public void NoReturn()
{
Console.WriteLine($"This NoReturn Start {Thread.CurrentThread.ManagedThreadId}");
Task task = Task.Run((() =>
{
Console.WriteLine($"This NoReturn Task Start {Thread.CurrentThread.ManagedThreadId}");
Thread.Sleep(2000);
Console.WriteLine($"This NoReturn Task End {Thread.CurrentThread.ManagedThreadId}");
}));
task.ContinueWith(t => Console.WriteLine($"This ContinueWith NoReturn End {Thread.CurrentThread.ManagedThreadId}"));
//Console.WriteLine($"This NoReturn End{Thread.CurrentThread.ManagedThreadId}");
}
public async void NoReturnAsync()
{
Console.WriteLine($"This NoReturnAsync Start {Thread.CurrentThread.ManagedThreadId}");
Task task = Task.Run((() =>
{
Console.WriteLine($"This NoReturnAsync Task Start{Thread.CurrentThread.ManagedThreadId}");
Thread.Sleep(2000);
Console.WriteLine($"This NoReturnAsync Task End{Thread.CurrentThread.ManagedThreadId}");
}));
await task;
Console.WriteLine($"This NoReturnAsync End{Thread.CurrentThread.ManagedThreadId}");
}
public async Task ReturnTask()
{
Console.WriteLine($"This NoReturn Start {Thread.CurrentThread.ManagedThreadId}"); //调用线程执行
Task task = Task.Run((() => //Task的子线程完成
{
Console.WriteLine($"This NoReturn Task Start {Thread.CurrentThread.ManagedThreadId}");
Thread.Sleep(2000);
Console.WriteLine($"This NoReturn Task End {Thread.CurrentThread.ManagedThreadId}");
}));
await task; //调用线程回去忙自己的事儿
Console.WriteLine($"This NoReturn End {Thread.CurrentThread.ManagedThreadId}");//Task子线程完成 如果没有
//await 那么应该是调用线程执行 ,可以认为,加了await就等于将await后面的代码,包装城一个回调,等同于 task.ContinueWith,其实
//回调的线程具备多种可能性
await Task.Run((() =>
{
Console.WriteLine($"This ReturnTask2 Task Start {Thread.CurrentThread.ManagedThreadId}");
Thread.Sleep(2000);
Console.WriteLine($"This ReturnTask2 Task End {Thread.CurrentThread.ManagedThreadId}");
}));
Console.WriteLine($"This NoReturn2 End {Thread.CurrentThread.ManagedThreadId}");
}
public long ReturnLong()
{
Console.WriteLine($"The Return Long Start{Thread.CurrentThread.ManagedThreadId}");
long result = 0;
Task task = Task.Run(() =>
{
Console.WriteLine($"The Return Long Task Start{Thread.CurrentThread.ManagedThreadId}");
for (int i = 0; i < 100000; i++)
{
result += i;
}
Console.WriteLine($"The Return Long Task End{Thread.CurrentThread.ManagedThreadId}");
return result;
});
Console.WriteLine($"The Return Long End{Thread.CurrentThread.ManagedThreadId}");
return result;
}
public async Task<long> ReturnLongAwait()
{
Console.WriteLine($"The Return Long Await Start{Thread.CurrentThread.ManagedThreadId}");
long result = 0;
Task task = Task.Run(() =>
{
Console.WriteLine($"The Return Long Await Task Start{Thread.CurrentThread.ManagedThreadId}");
for (int i = 0; i < 100000; i++)
{
result += i;
}
Console.WriteLine($"The Return Long Await Task End{Thread.CurrentThread.ManagedThreadId}");
return result;
});
await task;
Console.WriteLine($"The Return Long End{Thread.CurrentThread.ManagedThreadId}");
return result;
}
}
}
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
# 总结
<font color=#999AAA >提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。