1,学习地址---微软官网

2,目标:学习Razor,以及建立Web应用.

3,https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/?view=aspnetcore-3.0

4,概念学习:

异步编程模型 (TAP)'

相关网站

https://www.cnblogs.com/neverc/p/4653539.html

5, 异步线程执行的几个方式:

1,创建任务并且启动:

//方法1:
Task t = new Task(
() =>
{
Thread.Sleep(1000);
Console.WriteLine("Hello,World1\n");
});
t.Start();
//方法2:
await Task.Run(
() =>
{
Thread.Sleep(1000);
Console.WriteLine("Hello,World1\n");
});
//方法3:
Task<string> task2 =Task.Factory.StartNew<string>(() =>
{
return $"hello, task2的ID为{ Thread.CurrentThread.ManagedThreadId}";
});

2,aysnc 和 await的组合:

Thread.Sleep(1000);
             Console.WriteLine("Hello,World\n");
              await Task.Run<int>(
              () =>
              {
                  Thread.Sleep(1000);
                  Console.WriteLine("Hello,World1\n");
                  return 1;
              });
             Console.WriteLine("Hello,World2\n");
             return 1;

注意: 执行顺序     主函数---->调用aysnc函数并执行到await语句---------->回到主程序--->执行await之后的语句.

\                                                           /

\--执行 异步函数体-----------并且返回----/

3,任务的启动,取消,回调等...

任务等待:

Task的Wait/WaitAny/WaitAll方法
Task.WaitAll(new Task[]{ task1,task2});
Task.Factory.ContinueWhenAll(new Task[] { task1, task2 }, (t) =>
{
Thread.Sleep(100);
Console.WriteLine("执行后续操作");
});

4,任务取消CancellationTokenSource

namespace CancelAListOfTasks
{
public partial class MainWindow : Window
{
// Declare a System.Threading.CancellationTokenSource.
CancellationTokenSource cts; public MainWindow()
{
InitializeComponent();
} private async void startButton_Click(object sender, RoutedEventArgs e)
{
// Instantiate the CancellationTokenSource.
cts = new CancellationTokenSource(); resultsTextBox.Clear(); try
{
await AccessTheWebAsync(cts.Token);
// ***Small change in the display lines.
resultsTextBox.Text += "\r\nDownloads complete.";
}
catch (OperationCanceledException)
{
resultsTextBox.Text += "\r\nDownloads canceled.";
}
catch (Exception)
{
resultsTextBox.Text += "\r\nDownloads failed.";
} // Set the CancellationTokenSource to null when the download is complete.
cts = null;
} // Add an event handler for the Cancel button.
private void cancelButton_Click(object sender, RoutedEventArgs e)
{
if (cts != null)
{
cts.Cancel();
}
} // Provide a parameter for the CancellationToken.
// ***Change the return type to Task because the method has no return statement.
async Task AccessTheWebAsync(CancellationToken ct)
{
// Declare an HttpClient object.
HttpClient client = new HttpClient(); // ***Call SetUpURLList to make a list of web addresses.
List<string> urlList = SetUpURLList(); // ***Add a loop to process the list of web addresses.
foreach (var url in urlList)
{
// GetAsync returns a Task<HttpResponseMessage>.
// Argument ct carries the message if the Cancel button is chosen.
// ***Note that the Cancel button can cancel all remaining downloads.
HttpResponseMessage response = await client.GetAsync(url, ct); // Retrieve the website contents from the HttpResponseMessage.
byte[] urlContents = await response.Content.ReadAsByteArrayAsync(); resultsTextBox.Text +=
$"\r\nLength of the downloaded string: {urlContents.Length}.\r\n";
}
} // ***Add a method that creates a list of web addresses.
private List<string> SetUpURLList()
{
List<string> urls = new List<string>
{
"https://msdn.microsoft.com",
"https://msdn.microsoft.com/library/hh290138.aspx",
"https://msdn.microsoft.com/library/hh290140.aspx",
"https://msdn.microsoft.com/library/dd470362.aspx",
"https://msdn.microsoft.com/library/aa578028.aspx",
"https://msdn.microsoft.com/library/ms404677.aspx",
"https://msdn.microsoft.com/library/ff730837.aspx"
};
return urls;
}
}
static async void GetWebAsync1(CancellationToken ct)
{
try
{
await AccessTheWebAsync(ct); }
catch (OperationCanceledException)
{ }
catch (Exception)
{ } }
}

5 在一个任务完成后取消后续任务

static async Task  AccessTheWebAsync(CancellationTokenSource cts,CancellationToken ct)
{
HttpClient client = new HttpClient();
List<string> urlList = SetUpURLList();
IEnumerable<Task<int>> downloadTasksQuery =
from url in urlList select ProcessURLAsync(url, client, ct); // ***Use ToArray to execute the query and start the download tasks.
Task<int>[] downloadTasks = downloadTasksQuery.ToArray(); // ***Call WhenAny and then await the result. The task that finishes
// first is assigned to firstFinishedTask.
Task<int> firstFinishedTask = await Task.WhenAny(downloadTasks);

cts.Cancel();

            // websites can finish first.
var length = await firstFinishedTask;
Console.WriteLine($"\r\nLength of the downloaded website: {length}\r\n");
}

5.1 利用 Linq语法生成枚举类型,然后再触发异步事件群.

5.2 利用WhenAny,WhenAll等方法进行堵塞

static async Task  AccessTheWebAsync(CancellationTokenSource cts,CancellationToken ct)
{
HttpClient client = new HttpClient();
List<string> urlList = SetUpURLList();
IEnumerable<Task<int>> downloadTasksQuery =
from url in urlList select ProcessURLAsync(url, client, ct); // ***Use ToArray to execute the query and start the download tasks.
Task<int>[] downloadTasks = downloadTasksQuery.ToArray();
int[] first =await Task.WhenAll(downloadTasks);
foreach(var x in first) Console.WriteLine(x + "\r\n"); }
static async Task<int> ProcessURLAsync(string url, HttpClient client, CancellationToken ct)
{
// GetAsync returns a Task<HttpResponseMessage>.
HttpResponseMessage response = await client.GetAsync(url, ct); // Retrieve the website contents from the HttpResponseMessage.
byte[] urlContents = await response.Content.ReadAsByteArrayAsync();
Console.WriteLine("\r\n{urlContents}");
return urlContents.Length;
}

6,异步的防止再次进入函数的方法:

ASP.NET Learning Center---学习ASP.NET(1)的更多相关文章

  1. ASP.NET 开发者 开始学习ASP.NET Core 2吧

    .  NET Core 从2016年6月28日发布,过去了将近一年的时间,但是在工作中发现大家对.net core的接受程度并不高,这只是一个感觉,俗话说“没有调查就没有发言权”, 这两天通过微信小程 ...

  2. 学习ASP.NET MVC(九)——“Code First Migrations ”工具使用示例

    在上一篇文章中,我们学习了如何使用实体框架的“Code First Migrations ”工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 在本文章中,我们将使用“ ...

  3. 学习ASP.NET MVC(七)——我的第一个ASP.NET MVC 查询页面

    在本篇文章中,我将添加一个新的查询页面(SearchIndex),可以按书籍的种类或名称来进行查询.这个新页面的网址是http://localhost:36878/Book/ SearchIndex. ...

  4. 学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序

    学习ASP.NET MVC系列: 学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序 学习ASP.NET MVC(二)——我的第一个ASP.NET MVC 控制器 学习ASP ...

  5. 学习ASP.NET MVC(十一)——分页

    在这一篇文章中,我们将学习如何在MVC页面中实现分页的方法.分页功能是一个非常实用,常用的功能,当数据量过多的时候,必然要使用分页.在今天这篇文章中,我们学习如果在MVC页面中使用PagedList. ...

  6. 学习ASP.NET MVC系列 - 还有比这更简炼的吗?把复杂的事情变简单了,贡献啊!

    转自

  7. Asp.NET之对象学习

    一.总述 二.具体介绍 1.Request对象 Request对象是用来获取client在请求一个页面或传送一个Form时提供的全部信息,这包含可以标识浏览器和用户的HTTP变量,存储在client的 ...

  8. 学习ASP.NET Core,你必须了解无处不在的“依赖注入”

    ASP.NET Core的核心是通过一个Server和若干注册的Middleware构成的管道,不论是管道自身的构建,还是Server和Middleware自身的实现,以及构建在这个管道的应用,都需要 ...

  9. ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘

    开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学会三步:拖控件→设属性→绑事件,便可以行 ...

随机推荐

  1. C++ 对TXT 的串并行读写

    任务说明:有36篇文档,现在要读入,并统计词频,字典长度25,希望能够比较串并行读写操作的时间差距. 串行读入并统计词频 // LoadDocsInUbuntu.cpp // #include < ...

  2. Jpofiler

    参考链接: https://blog.csdn.net/u010638673/article/details/81703942

  3. 秒秒钟破解eval加密

    前言  准确的说eval处理过的代码应该叫做压缩代码,不过效果上算是加密过了一样!很多小伙伴不想直接让别人看到自己的js代码往往就会采取这样的处理措施.不过,其实这样的方法只能防御那些小白.对于真正的 ...

  4. tmobst2

    (单选题)与下面代码效果相同的HQL 语句是( ). Criteria criteria = session.createCriteria(User.class); criteria.add(Rest ...

  5. VC实现快递查询

    #include <iostream> #include <string> #include <cstdlib> #include <afxinet.h> ...

  6. This function or variable may be unsafe

    1>------ Build started: Project: wintest, Configuration: Debug Win32 ------ 1>  Source.cpp 1&g ...

  7. 【SpringBoot MQ 系列】RabbitMq 核心知识点小结

    [MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...

  8. gentoo在KVM+QEMU中安装笔记

    gentoo是比较难安装的,本笔记主要是记录本次安装过程,以备参考. 1.首先,下载镜像,可以去国内各大镜像网站下载,我选择的是清华的镜像源:https://mirrors.tuna.tsinghua ...

  9. 小程序图片 mode 设置为 widthFix 图片显示瞬间竖向拉伸变形闪烁

    官方文档中 mode="widthFix"   宽度不变,高度自动变化,保持原图宽高比不变,即设置图片宽度而高度自适应. 但是在实际开发中发现图片在初始加载时瞬间竖向拉伸变形闪烁然 ...

  10. BZOJ1257 [CQOI2007]余数之和 (数论分块)

    题意: 给定n, k,求$\displaystyle \sum_{i=1}^nk\;mod\;i$ n,k<=1e9 思路: 先转化为$\displaystyle \sum_{i=1}^n(k- ...