分类

CSharp

CSharp 2018-02-03

Asp.Net 中的异步死锁

首先大概介绍下asyncawait这两个关键字。
在.Net 4.5中,微软为了方便异步编程提供了asyncawait这两个关键字,使用他们,可以使我们很方便的实现自己的异步代码,而不用太去关心其内部原理。那么他们的主要作用使什么呢? async关键字加在方法的声明上,他的主要目的使为了使方法内部的await关键字生效。而方法的返回值也一般是Task或者Task<T>类型。这些Task类型一般相当于是future,用来在异步方法结束时通知主程序。如下面示例代码:

public async Task DoSomethingAsync()
{
    int val = 1;
    await Task.Delay(TimeSpan.FromSeconds(1));
    val *= 3;
    await Task.Delay(TimeSpan.FromSeconds(2));
    Console.WriteLine(val);
}

和同步方法一样,async方法在开始时候以同步方式执行。在async方法内部,await关键字对他对参数执行了一个异步等待,他首先检查操作是否已经完成,如果完成了,则继续执行。否则,他会暂停async方法,并返回,留下一个未完成的task。一段时间操作完成后,async方法恢复执行。
当异步方法在await处暂停时,就可以捕捉上...

CSharp 2017-12-23

dotnet命令整理

基本格式:

dotnet [command] [arguments] [--additional-deps] [--additionalprobingpath] [-d|--diagnostics] [--fx-version] [-h|--help] [--info] [--roll-forward-on-no-candidate-fx] [-v|--verbose] [--version]

选项说明:
--additionaldeps <PATH>
其他路径deps.json文件。
--additionalprobingpath <PATH>
包含要进行探测的探测策略和程序集的路径。
-d|--diagnostics
启用诊断输出。
--fx-version <VERSION>
运行应用程序所使用的已安装 .NET Core 运行时的版本。 -h|--help
打印出有关命令的简短帮助。 如果使用 dotnet,还会打印可用命令的列表。
--info
打印出有关 CLI 工具和环境的详细信息,例如当前操作系统、提交该版本的 SHA 和其他信息。
--roll-forward-on-no-candidate-fx
在没有候选共享框架的情况下前滚。
-v|--verbose
启用详细输出。
--version
打印使用中的 .NET Core SDK 版本。

常用命令:

...

CSharp 2017-05-04

SqlServer使用表值参数批量插入更新数据

首先,创建自定义表类型:

CREATE TYPE BulkUdt AS TABLE(
Id int,
Name NVARCHAR(10)
)

然后是使用方式:

private static System.Data.DataTable GetTestTable()
{
    System.Data.DataTable dt = new System.Data.DataTable();
    dt.Columns.Add("Id");
    dt.Columns.Add("Name");
    for (int i = 0; i < 1000; i++)
    {
        var row = dt.NewRow();
        row["Id"] = i.ToString();
        row["Name"] = $"Name{i}";
        dt.Rows.Add(row);
    }
    return dt;
}

static void InsertTest()
{
    var dt = GetTestTable();
    SqlConnection sqlConn = new SqlConnection(
        ConfigurationManager.ConnectionStrings["Conn...
CSharp 2017-02-27

为mvc添加全局过滤器实现Response重写

我们公司的网站都是使用的是mvc框架,最近有这样的需求.因为之前的一些东西在开始开发的时候写死了.比如静态资源地址或者别的站点的地址.但是最近改版的时候需要重新配置地址.如果全局搜索修改地址的话工作量太大.于是想着是否可以使用全局过滤器来重写Response流来实现.下面给出解决方案. 具体就是重写ActionFilterAttribute.然后为Response.Filter重置为我们实现了我们业务需要的Filter. 首先创建过滤器.如下:

public class RewriteHttpsFilterAttribute : ActionFilterAttribute
   {
       public override void OnActionExecuting(ActionExecutingContext filterContext)
       {
           var response = filterContext.HttpContext.Response;
           string IsRedirectToHttps = ConfigurationManager.AppSettings["IsRedirectToHttps"];
           string IsRewriteToHttps = ConfigurationMana...
发现更多