接口中的异步方法:
async是提示编译器为异步方法中的await代码进行分段处理的,而一个异步方法是否修饰了async对于方法的调用者来讲没区别的,因此对于接口中的方法或者抽象方法不能修饰为async。
class Program
{
static async Task Main(string[] args)
{
Tset tset = new Tset();
Console.WriteLine(await tset.ReadCharCount(@"d:\文本文件\1.txt"));
}
interface ITest
{
Task<int> ReadCharCount(string file);
}
class Tset : ITest
{
public async Task<int> ReadCharCount(string file)
{
string s = await File.ReadAllTextAsync(file);
return s.Length;
}
}
}
异步与yield:
yield return不仅能够简化数据的返回,而且可以让数据处理“流水线化”,提升性能。
在旧版C#中,async方法中不能用yield。从C#8.0开始,把返回值声明为IAsyncEnumerable(不要带Task),然后遍历的时候用await foreach()即可。
yield打断点可以看到 返回一个 输出一个 再返回一个 再输出一个
class Program
{
static async Task Main(string[] args)
{
foreach (var item in test2())
{
Console.WriteLine(item);
}
await foreach (var item in test3())
{
Console.WriteLine(item);
}
}
static IEnumerable<string> test1()
{
List<string> list = new List<string>();
list.Add("1111");
list.Add("2222");
list.Add("3333");
return list;
}
static IEnumerable<string> test2()
{
yield return "1111";
yield return "2222";
yield return "3333";
}
static async IAsyncEnumerable<string> test3()
{
yield return "1111";
yield return "2222";
yield return "3333";
}
}
ASP.NET Core和控制台项目中没有SynchronizationContext,因此不用管ConfigureAwait(false)等。 不要同步、异步混用。
版权声明:本文为CSDN博主「边城°」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/qq_42121121…