小编Uri*_*iil的帖子

如何等待异步委托

在其中一个MVA视频中,我看到了下一个结构:

static void Main(string[] args)
{
    Action testAction = async () =>
    {
        Console.WriteLine("In");
        await Task.Delay(100);
        Console.WriteLine("After first delay");
        await Task.Delay(100);
        Console.WriteLine("After second delay");
    };

    testAction.Invoke();
}
Run Code Online (Sandbox Code Playgroud)

执行结果将是:

In
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)

它是完美的编译,但现在我没有看到任何方式等待它.我可能会在调用之后Thread.SleepConsole.ReadKey之后,但这不是我想要的.

那么应该如何修改这个代表以使其变得等待?(或者至少我如何跟踪该执行是否完成?)

这些代表有实际用途吗?

.net c# asynchronous async-await

31
推荐指数
2
解决办法
4万
查看次数

在ASP.NET核心中间件中设置响应状态

我有一个中间件,它隐藏了客户端的异常,并在出现任何异常时返回500错误:

public class ExceptionHandlingMiddleware
{
    private readonly RequestDelegate _next;

    public ExceptionHandlingMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        try
        {
            await _next.Invoke(context);
        }
        catch (Exception exception)
        {
            var message = "Exception during processing request";
            using (var writer = new StreamWriter(context.Response.Body))
            {
                context.Response.StatusCode = 500; //works as it should, response status 500
                await writer.WriteAsync(message);
                context.Response.StatusCode = 500; //response status 200
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我在写主体之前设置响应状态,客户端将看到此状态,但如果我在向主体写入消息后设置状态,则客户端将收到状态为200的响应.

有人可以解释一下为什么会这样吗?

PS我正在使用ASP.NET Core 1.1

asp.net asp.net-core

8
推荐指数
1
解决办法
5760
查看次数

SQL Server截断作为JSON返回的数据

问题是,如果SQL返回超过2033个字符的JSON,它会被截断,但如果我在SQL端将其转换为NVARCHAR(max),结果将不会被截断,一切都会好的.

有趣的是,在SSMS中我有类似的行为,当我复制JSON返回为字符串时,它复制整个对象,但是如果我复制JSON的值作为JSON返回它会在N个字符后被截断.但是如果我点击JSON作为JSON结果它将打开完整对象.

有什么想法来解释这种行为?

代码,读取数据(虽然我在这里使用dapper,结果与SqlCommand和ExecuteScalar/Reader相同):

using (var connection = new SqlConnection(_connectionString))
{
    var response = await connection.ExecuteScalarAsync<string>($"[Portal].[GetData]", commandType: CommandType.StoredProcedure);
    return response == null ? null : JObject.Parse(response);
}
Run Code Online (Sandbox Code Playgroud)

过程,返回.NET可以正确解析的结果:

   CREATE PROCEDURE [Portal].[GetData] 
   AS
   BEGIN
    SET NOCOUNT ON;

    DECLARE @result NVARCHAR(max);
    SET @result = (SELECT TOP (120) 
        [DateTime]
        ,[Open]
        ,[Closed]
        ,[Total]
    FROM [Common].[Table]
        FOR JSON PATH, ROOT('Root'))
    SELECT @result;
   END 
Run Code Online (Sandbox Code Playgroud)

SSMS中的结果视图(结果不可点击,但可以复制而不截断):

以字符串形式返回

过程,返回截断的结果(结果不可点击):

   CREATE PROCEDURE [Portal].[GetData] 
   AS
   BEGIN
    SET NOCOUNT ON;

    SELECT TOP (120) 
        [DateTime]
        ,[Open]
        ,[Closed]
        ,[Total]
    FROM [Common].[Table]
        FOR JSON PATH, …
Run Code Online (Sandbox Code Playgroud)

c# sql t-sql sql-server azure-sql-database

8
推荐指数
0
解决办法
3107
查看次数

对于循环R,使用输出创建并填充新列

我有一个csv有一些结果.我想遍历结果,运行power.prop.test并输出新列中每行的结果.到目前为止,我有这个:

data <- read.csv("Downloads/data.csv", sep = ",", header = TRUE)

for (i in 1:nrow(data)) {
  n <- power.prop.test( p1 = data[i,5], p2 = data[i,6], sig.level=.1, power = .8, alternative = "one.sided")
  data <- cbind(data, n[1])
}
head(data)
Run Code Online (Sandbox Code Playgroud)

我没有用输出填充一列,而是循环并为power.prop.test创建一个新列,我正在运行.我为每个输出绑定一个新列,而不是为每个输出填充一列.问题是我不确定如何实现后者.

如果有人对如何将这些输出合并到一个非常好的列中有任何建议.

谢谢!

for-loop r populate

5
推荐指数
1
解决办法
2万
查看次数

在redux删除操作中切片与过滤器

Redux文档中我知道,我们永远不应该改变状态,这就是我们应该使用concatslice方法的原因,所以我最终使用了reducer(为简化而删除了大部分操作):

export default function blocks(state = [], action) {  
    switch (action.type) {
        case DELETE_BLOCK:
          var index = state.findIndex(e => e.id === action.blockId);
          return [...state.slice(0, index), ...state.slice(index + 1)];
        default:
          return state;
}
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我没有要删除的元素的索引,所以我可以使用filter吗?像这样:

export default function blocks(state = [], action) {  
    switch (action.type) {
        case DELETE_BLOCK:
          return state.filter(e => e.id !== action.blockId);
        default:
          return state;
}
Run Code Online (Sandbox Code Playgroud)

javascript reactjs redux

3
推荐指数
1
解决办法
958
查看次数

PDF.js 2.0.943无法在浏览器中呈现PDF

我试图在浏览器中显示PDF,我发现了库PDF.js,它是最受欢迎和建议最多的库。文档和都非常清楚,但是我尝试使用最新的官方版本2.0.943的文档未呈现,但已加载(因为我看到正确的页数),但是看不到。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>

    <!--<script src="//mozilla.github.io/pdf.js/build/pdf.js"></script>-->
    <script src="https://cdn.jsdelivr.net/npm/pdfjs-dist@2.0.943/build/pdf.js"></script>

    <h1>PDF.js Previous/Next example</h1>

    <div>
        <button id="prev">Previous</button>
        <button id="next">Next</button>
        &nbsp; &nbsp;
        <span>Page: <span id="page_num"></span> / <span id="page_count"></span></span>
    </div>

    <canvas id="the-canvas"></canvas>
    <script>
        $(document).ready(function () {

            var pdfData = atob(
                'JVBERi0xLjcKCjEgMCBvYmogICUgZW50cnkgcG9pbnQKPDwKICAvVHlwZSAvQ2F0YWxvZwog' +
                'IC9QYWdlcyAyIDAgUgo+PgplbmRvYmoKCjIgMCBvYmoKPDwKICAvVHlwZSAvUGFnZXMKICAv' +
                'TWVkaWFCb3ggWyAwIDAgMjAwIDIwMCBdCiAgL0NvdW50IDEKICAvS2lkcyBbIDMgMCBSIF0K' +
                'Pj4KZW5kb2JqCgozIDAgb2JqCjw8CiAgL1R5cGUgL1BhZ2UKICAvUGFyZW50IDIgMCBSCiAg' +
                'L1Jlc291cmNlcyA8PAogICAgL0ZvbnQgPDwKICAgICAgL0YxIDQgMCBSIAogICAgPj4KICA+' +
                'PgogIC9Db250ZW50cyA1IDAgUgo+PgplbmRvYmoKCjQgMCBvYmoKPDwKICAvVHlwZSAvRm9u' +
                'dAogIC9TdWJ0eXBlIC9UeXBlMQogIC9CYXNlRm9udCAvVGltZXMtUm9tYW4KPj4KZW5kb2Jq' +
                'Cgo1IDAgb2JqICAlIHBhZ2UgY29udGVudAo8PAogIC9MZW5ndGggNDQKPj4Kc3RyZWFtCkJU' +
                'CjcwIDUwIFRECi9GMSAxMiBUZgooSGVsbG8sIHdvcmxkISkgVGoKRVQKZW5kc3RyZWFtCmVu' +
                'ZG9iagoKeHJlZgowIDYKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDEwIDAwMDAwIG4g' +
                'CjAwMDAwMDAwNzkgMDAwMDAgbiAKMDAwMDAwMDE3MyAwMDAwMCBuIAowMDAwMDAwMzAxIDAw' +
                'MDAwIG4gCjAwMDAwMDAzODAgMDAwMDAgbiAKdHJhaWxlcgo8PAogIC9TaXplIDYKICAvUm9v' +
                'dCAxIDAgUgo+PgpzdGFydHhyZWYKNDkyCiUlRU9G');

            // Loaded via <script> tag, create shortcut to access …
Run Code Online (Sandbox Code Playgroud)

html javascript pdf pdfjs

2
推荐指数
1
解决办法
1196
查看次数

使用 UseSetting 覆盖配置

我正在使用 .NET Core 2.2、默认模板并尝试使用 UseSetting 覆盖配置,但是我无法使其工作。在配置中将测试值设置为文件,我想在代码中使用相同的值覆盖它,然后在启动中我想获取覆盖的值。

(最初我试图添加 AzureKeyVaultProvider,但它对我不起作用,我以这个示例结束)

配置:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Test": "file" 
}
Run Code Online (Sandbox Code Playgroud)

程序.cs:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseSetting("Test", "code");
}
Run Code Online (Sandbox Code Playgroud)

启动.cs:

public class Startup
{
    private readonly IConfiguration _configuration;

    public Startup(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        var value = _configuration.GetValue<string>("Test");
    }

    // This method gets called by …
Run Code Online (Sandbox Code Playgroud)

.net c# configuration .net-core asp.net-core

2
推荐指数
1
解决办法
2623
查看次数

C#8理解使用语法

我有下一个方法:

public async Task<IEnumerable<Quote>> GetQuotesAsync()
{
    using var connection = new SqlConnection(_connectionString);

    var allQuotes = await connection.QueryAsync<Quote>(@"SELECT [Symbol], [Bid], [Ask], [Digits] FROM [QuoteEngine].[RealtimeData]");

    return allQuotes;
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,也很清楚,连接将放在示波器的末尾。

但是resharper建议将其更改为:

public async Task<IEnumerable<Quote>> GetQuotesAsync()
{
    await using var connection = new SqlConnection(_connectionString);

    var allQuotes = await connection.QueryAsync<Quote>(@"SELECT [Symbol], [Bid], [Ask], [Digits] FROM [QuoteEngine].[RealtimeData]");

    return allQuotes;
}
Run Code Online (Sandbox Code Playgroud)

它在使用前增加了等待,并且代码已成功编译。这是什么意思,什么时候需要做?

c# resharper using async-await

1
推荐指数
2
解决办法
91
查看次数

C#从内部类调用一个引用外部类的方法

我有一个名为Foo的类,它有一个内部类Inner.Inner类引用了外部类的字段.

public class Foo
{
    int foo = 2;

    public class Inner
    {
        Foo f;
        public Inner(Foo f)
        {
            f=f;
        }

        public override String ToString()
        {
            return "Inner[foo="+f.foo+"]" ;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的计划.

public class Program
{
   public static void Main(string[] args)
   {    
      Foo foo=new Foo();
      Foo.Inner inner=new Foo.Inner(foo);
      Console.WriteLine(inner.ToString());
   }
}
Run Code Online (Sandbox Code Playgroud)

编译它没有问题,但是当我运行它时失败了.它给了我一个例外

未处理的异常:System.NullReferenceException:未将对象引用设置为对象的实例.在Foo.Inner.ToString()

这里发生了什么?

c#

0
推荐指数
1
解决办法
580
查看次数

SQL SUM问题.如何获得人口总和?

表:

cia ( name , region , area , population , gdp )
Run Code Online (Sandbox Code Playgroud)

我正在自学SQL,并且遇到了一些我无法弄清楚的事情.我试图从数据库中提取的数据是比利时,荷兰和卢森堡的人口总数.我尝试过以下方法:

SELECT SUM(population) FROM cia WHERE name = 'Belgium' AND 'Netherlands' AND 'Luxembourg';
Run Code Online (Sandbox Code Playgroud)

返回的值似乎不正确.我错过了什么?

sql

0
推荐指数
1
解决办法
41
查看次数