我想在单独的线程中处理长时间运行的操作,并使用async/await模式将控制返回到GUI线程,如下所示:
private async void Button_Click(object sender, RoutedEventArgs e)
{
await Test();
txtResult.Text = "Done!";
}
private Task Test()
{
Thread.Sleep(3000);
return Task.FromResult(0);
}
Run Code Online (Sandbox Code Playgroud)
问题是,它无论如何都会冻结GUI 3秒钟(在3秒后显示Done!之前它会变得无法响应).我究竟做错了什么?
编辑:我试图取代以下逻辑:
private void Button_Click(object sender, RoutedEventArgs e)
{
var thread = new Thread(() => Test(Callback));
thread.Start();
}
private void Callback()
{
Dispatcher.Invoke(() =>
txtResult.Text = "Done!");
}
private void Test(Action callback)
{
Thread.Sleep(3000); //long running operation, not necessarily pause
callback();
}
Run Code Online (Sandbox Code Playgroud)
在实际项目中,我有不同的长时间运行逻辑而不仅仅是Sleep,它仍然会冻结GUI,因此用Task.Delay替换它并不能解决任何问题.此外,我不明白为什么你应该使用另一个命令睡眠?async/await设计需要什么?
我之前在自定义构建项目中使用过 selenium webdriver。它立即打开了我项目的网页,并立即开始运行测试用例。唯一的先决条件是在启动项目服务器之前启动它。
现在,在使用“ng new”创建通用项目后,我使用“ng serve”启动了它。然后我运行 'ng e2e' 来测试 UI。它有效,但由于某种原因,它再次经历了整个模块构建过程。虽然我希望测试尽快开始需要一些时间,但我从我的经验中知道这是可以完成的。
问题:ng e2e的模块构建阶段可以省略吗?
我在开发环境中有跨域问题,webpack-dev-server在端口8080上运行,而后端在端口5000上运行.
这些问题是可以解决的,但我想知道为什么不打算在生产中发生这种情况(客户端和后端都会使用相同的端口)
可以解决这个问题(例如通过运行dev服务器并在同一端口或任何其他方式表达?)
我有程序heroku_test.ts
console.log('test')
,可以使用以下命令运行它:
heroku run ts-node heroku_test.ts
在同一控制台窗口中,我看到它输出“ test”,但是当我查看heroku日志时,那里没有“ test”,它只是说“启动过程使用命令ts-node heroku_test.ts“
为什么heroku日志不包含console.log输出?
编辑:问题不同于如何在heroku中显示来自node.js的所有console.log?因为我可以看到除console.log输出以外的所有日志。
当我像这样导入屏幕对象时
import { render, screen } from '@testing-library/react';
它允许我发出以下命令:screen.findByTestId(...),但是我如何通过data-test(而不是data-testid)进行搜索?尝试通过自定义属性进行搜索,但两者都没有findByAttribute方法screen。
根据文档,使用纯 js 中的头盔非常容易:
const express = require('express')
const helmet = require('helmet')
const app = express()
app.use(helmet())
Run Code Online (Sandbox Code Playgroud)
但是我怎么能从打字稿中使用它呢?Typings文件导出一堆东西,其中一个是头盔接口,不能作为函数调用..我可以像这样导入它,但不知道接下来要做什么,我应该传递给app.use什么?
import * as helmet from 'helmet'
Run Code Online (Sandbox Code Playgroud)
我已经导入了头盔和打字机的最新版本:
"@types/helmet": "0.0.43",
"helmet": "^3.18.0"
Run Code Online (Sandbox Code Playgroud) 我在这里搜索与redux一起使用flow的方法时找到了代码示例:https://flow.org/en/docs/frameworks/redux/
特殊的语法是(action:empty); 它只是一些流魔法,只是在switch语句的默认情况下使用,还是有其他用途?
它看起来像没有返回值类型的不合适的函数类型语句但是带有奇怪类型'empty'的参数,我找不到文档.
// @flow
type State = { +value: boolean };
type FooAction = { type: "FOO", foo: boolean };
type BarAction = { type: "BAR", bar: boolean };
type Action = FooAction | BarAction;
function reducer(state: State, action: Action): State {
switch (action.type) {
case "FOO": return { ...state, value: action.foo };
case "BAR": return { ...state, value: action.bar };
default:
(action: empty);
return state;
}
}
Run Code Online (Sandbox Code Playgroud) 所以我schema.graphql使用amplify add api命令创建,但是当它让我生成查询、突变和订阅时,我说不。
现在我想知道,我怎样才能在事后生成它们?还是必须重新走amplify add api一遍整个流程?
angular-cli ×1
async-await ×1
asynchronous ×1
aws-amplify ×1
aws-appsync ×1
c# ×1
cors ×1
express ×1
flowtype ×1
helmet.js ×1
heroku ×1
redux ×1
selenium ×1
typescript ×1