我停在了一个断点上,我需要观察在这种情况下使用立即窗口调用异步函数的结果。所以我试过了
var things = await Client.GetThingsAsync("aParameter");
Run Code Online (Sandbox Code Playgroud)
“await”运算符只能在异步方法中使用。考虑使用“async”修饰符标记此方法并将其返回类型更改为“Task”。
但是断点已经在异步方法中了。我也试过跑
var things = Client.GetThingsAsync("aParameter");
Run Code Online (Sandbox Code Playgroud)
“评估需要一个线程临时运行。使用观察窗口执行评估。”
所以我尝试了 Watch 窗口
ClientGetThingsAsync("aParameter").Result;
Run Code Online (Sandbox Code Playgroud)
“函数评估需要所有线程运行。”
编辑代码和重新构建让我很崩溃,因为每次构建需要 15 分钟。调试时可以使用哪些策略来调用异步调用?
我们需要将配置提供程序添加到本机提供给 Azure Functions 的本机 IConfiguration。目前,我们正在使用以下代码将其完全替换为我们的自定义 Iconfiguration:
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
...
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddAzureKeyVault(...)
.AddJsonFile("local.settings.json", true, true)
.AddEnvironmentVariables()
.Build();
builder.Services.AddSingleton<IConfiguration>(configuration);
builder.Services.AddSingleton<IMyService, MyService>();
}
}
Run Code Online (Sandbox Code Playgroud)
一些上下文
MyService 在其构造函数中需要来自 KeyVault 提供程序的值以及 Application Insights 等其他实例。如果我们保留默认的 IConfiguration,则它没有 KeyVault 值。如果我们用工厂创建 MyService 实例,我们需要手动提供 App Insights 实例等。目前替换 IConfiguration 编译和函数运行。但它打破了其他默认行为,例如不从 host.json 获取配置(我们正在尝试配置队列触发器)。使用默认的 IConfiguration 可以正确读取 host.json 中的设置。
我们的函数将所有逻辑委托给另一个类“CreateHandler”,我们在其中通过 DI 使用 ILogger。该函数可以正确记录日志,但 CreateHandler 却不能。在本地,我们验证了它不会登录到控制台,除非我们将类命名空间更改为以“Function”开头的名称。这意味着 FunctionR 或 FunctionS 可以工作,但 RFunction 或 SFunction 不会。我们正在处理该类和服务。显然,我们的服务有一个完全不同的命名空间,我们需要保留该命名空间,同时进行日志记录。如何在不改变命名空间的情况下使类日志生效?
CreateHandler 类(记录正确):
using ExampleProject.Domain.Entities;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
namespace FunctionAnything
{
public class CreateHandler
{
private readonly ILogger<CreateHandler> _logger;
public CreateHandler(
ILogger<CreateHandler> logger)
{
_logger = logger;
}
public async Task Handle(Car car)
{
_logger.LogInformation($"This is logging properly");
}
}
}
Run Code Online (Sandbox Code Playgroud)
CreateHandler 类(不记录日志):
using ExampleProject.Domain.Entities;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
namespace ExampleProject.Functions.Handlers
{
public class CreateHandler
{
private readonly ILogger<CreateHandler> _logger;
public CreateHandler(
ILogger<CreateHandler> logger)
{
_logger …
Run Code Online (Sandbox Code Playgroud) c# azure azure-application-insights azure-functions microsoft-extensions-logging
在用户选择离子无线电之后,该组件将调用一个功能。我需要该功能来取消选择收音机。
模板:
<form [formGroup]="myForm">
<ion-list radio-group formControlName="listOptions">
<ion-item>
<ion-label>Option 1</ion-label>
<ion-radio value="1" (ionSelect)="myFunction($event)"></ion-radio>
</ion-item>
</ion-list>
</form>
Run Code Online (Sandbox Code Playgroud) 目前,它返回一个难以理解的块,由多个这些东西粘在一起组成,如下所示:
在 C:\\Repositories\\projectx\\src\\ProyectX.Services\\Service.cs 中的 ProyectX.Services.Service.Validate(IList 1 myParam):第 116 行\r\n 在 ProyectX.Services.Service.Validate (IList 1 myParam) 在 C:\\Repositories\\projectx\\src\\ProyectX.Services\\Service.cs:第 116 行\r\n
目标:
在 C:\Repositories\projectx\src\ProyectX.Services\Service.cs 中的 ProyectX.Services.Service.Validate(IList 1 myParam):第 116 行
在 C:\Repositories\projectx\src\ProyectX.Services\Service.cs 中的 ProyectX.Services.Service.Validate(IList 1 myParam):第 116 行
我尝试过
Regex.Unescape(exception.StackTrace)
JsonSerializer.Serialize(exception.StackTrace, new JsonSerializerOptions() {WriteIndented = true });
Run Code Online (Sandbox Code Playgroud)
中间件位于Startup.cs中
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseMiddleware<ErrorHandlerMiddleware>();
Run Code Online (Sandbox Code Playgroud)
中间件:
using System;
using System.Collections.Generic;
using System.Net;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Hosting;
using ProyectX.Domain.Exceptions;
using ProyectX.Domain.Models;
namespace ProyectX.API.Middleware
{
public class ErrorHandlerMiddleware …
Run Code Online (Sandbox Code Playgroud) 我需要检入组件(不在模板中)是否由formBuilder生成的控件有效。我试过了:
if(this.miSpecialForm.controls.miName.dirty){
console.log('Hi mom!');
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误:
Property 'miName' does not exist on type '{ [key: string]: AbstractControl; }'
Run Code Online (Sandbox Code Playgroud) 我得到Uncaught ReferenceError:后缀操作中的左侧表达式无效.这是代码:
var visitNumber = parseInt("1")++;
Run Code Online (Sandbox Code Playgroud) 说我有
public class MyController : Controller
{
...
public async Task<IActionResult> MyAction()
{
DoSomethingSync();
return View();
}
Run Code Online (Sandbox Code Playgroud)
用得好吗?难道它不应该至少有一些异步来证明“异步任务 L...”定义的合理性吗?该控制器中的每个操作似乎都遵循相同的模式。
有人回答了我关于使用现有表生成具有随机值的表的问题(仍在努力解决)。答案是这样的:
select uuid_generate_v4(), a."Account", tns."Name", tvs."Value"
from generate_series(1, 10) x(rn)
left join (
select "Account", row_number() over(order by random()) rn from "AccountSamples"
) a on a.rn = x.rn
Run Code Online (Sandbox Code Playgroud)
我不明白 x(rn) 部分,它似乎是一个别名,但我不明白为什么它在括号内有一个“rn”,并且括号本身对我来说是新的,是 rn 另一个别名还是一个特殊的关键字?
所以我有这个WrapperFunction试图使FunctionReturningVoid被异步调用:
public async Task WrapperFunction()
{
this.FunctionReturningVoid("aParameter");
}
Run Code Online (Sandbox Code Playgroud)
这是什么都不返回的函数。在代码的某些部分(此处未详细介绍),它被称为SYNChronously,但在CallerFunction()中,我们希望它以ASYNChronously运行。
public void FunctionReturningVoid(string myString)
{
Console.Write(myString);
}
Run Code Online (Sandbox Code Playgroud)
这是已实现异步的函数,需要WrapperFunction进行操作而不阻塞otherStuff()。
public async Task CallerFunction()
{
await WrapperFunction():
int regular = otherStuff();
...
}
Run Code Online (Sandbox Code Playgroud)
IDE向我警告WrapperFunction没有使用await:
这种异步方法缺少“等待”运算符,将同步运行。考虑使用“ await”运算符来等待非阻塞API调用,或者使用“ await Task.Run(...)”来在后台线程上执行CPU绑定的工作。
问题:如何在WrapperFunction中使用异步而不使用await?如果我使用await,它告诉我不能等待void。
c# ×5
async-await ×3
angular ×2
asp.net-mvc ×2
azure ×2
.net-core ×1
ionic2 ×1
javascript ×1
microsoft-extensions-logging ×1
postgresql ×1
radio-button ×1