在其中一个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.Sleep或Console.ReadKey之后,但这不是我想要的.
那么应该如何修改这个代表以使其变得等待?(或者至少我如何跟踪该执行是否完成?)
这些代表有实际用途吗?
我有一个中间件,它隐藏了客户端的异常,并在出现任何异常时返回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
问题是,如果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) 我有一个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创建一个新列,我正在运行.我为每个输出绑定一个新列,而不是为每个输出填充一列.问题是我不确定如何实现后者.
如果有人对如何将这些输出合并到一个非常好的列中有任何建议.
谢谢!
从Redux文档中我知道,我们永远不应该改变状态,这就是我们应该使用concat和slice方法的原因,所以我最终使用了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) 我试图在浏览器中显示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>
<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) 我正在使用 .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) 我有下一个方法:
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)
它在使用前增加了等待,并且代码已成功编译。这是什么意思,什么时候需要做?
我有一个名为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()
这里发生了什么?
表:
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)
返回的值似乎不正确.我错过了什么?
c# ×5
.net ×2
asp.net-core ×2
async-await ×2
javascript ×2
sql ×2
.net-core ×1
asp.net ×1
asynchronous ×1
for-loop ×1
html ×1
pdf ×1
pdfjs ×1
populate ×1
r ×1
reactjs ×1
redux ×1
resharper ×1
sql-server ×1
t-sql ×1
using ×1