小编qui*_*mmo的帖子

当线程死掉时,C#ThreadStaticAttribute标记的字段会自动释放吗?

我发现了'ThreadStaticAttribute',我有很多关于它的问题:我以前所有依赖于线程的静态信息都是作为一个静态字典实现的,TKey是Thread,当我想访问它时,我使用了Thread.CurrentThread和那个作品.但这需要mantainance,因为如果一个线程死了,我必须从字典中删除相应的条目.我还需要考虑线程安全以及许多其他问题.

通过使用ThreadStaticAttribute,所有这些问题似乎都得到了解决,但我需要确定它.我的问题是:在线程死之前,我是否需要以某种方式删除'ThreadStaticAttribute'标记字段的实例保留?那个领域的信息在哪里举行?它是在Thread对象的实例中,或类似的东西,所以当它不再使用时,垃圾收集器会自动丢弃它?是否有性能损失?什么?它比我正在使用的Keyed集合更快吗?

请,我需要澄清'ThreadStaticAttribute'的工作原理.

谢谢.

c# static multithreading

18
推荐指数
2
解决办法
3783
查看次数

在数组javascript的sort函数中实现async/await

我正在尝试在量角器上实现排序方法ElementArrayFinder.众所周知,所有量角器方法都会返回承诺.所以我的排序方法有一个依赖于promises解决方案的条件.我正在使用节点插件,async/await以使其与低于6的node.js版本兼容.(这里的插件:https://www.npmjs.com/package/asyncawait)

在这里我的代码,其中thisArrayElementFinder:

var asyncCompare = async(function(a, b) {
    let x = await (a.getText());
    let y = await (b.getText());
    console.log(x.localeCompare(y));
    return x.localeCompare(y);
});

var sortTheArray = async(function(arrayOfElementFinders) {
    return await (arrayOfElementFinders.sort(asyncCompare));
});

this.then((elements) => {
    let arrayOfElementFinders = [elements[0], elements[1], elements[2]];
    let sortedArray = sortTheArray(arrayOfElementFinders);
    console.log('array sorted');
});
Run Code Online (Sandbox Code Playgroud)

不幸的是,时序执行不是我期望的.印刷:array sorted发生在比之前的印刷品上x.localeCompare(y).知道我做错了什么吗?任何想法如何实现我的目标?

非常感谢您的帮助

javascript sorting promise async-await protractor

6
推荐指数
1
解决办法
4267
查看次数

用React和Typescript开玩笑的嘲笑:模拟ES6类依赖

我对Jest完全陌生。

我正在使用带有Typescript的React,并且在单元测试中,我必须模拟一个模块,该模块包含在我要为其编写容器测试(容器组件)的主文件中。

我尝试测试的文件导入了此模块:

import PerformancesResultsReader from './../../models/PerformancesResultsReader';
Run Code Online (Sandbox Code Playgroud)

然后它通过以下方式使用该模块:

const performancesResultsReader = new PerformancesResultsReader();
performancesResultsReader.read();
Run Code Online (Sandbox Code Playgroud)

该文件称为 AppPage.component.tsx

测试文件位于同一文件夹中,当我使用自动模拟时,它可以按预期工作。自动模拟是通过jest mock相同导入的来简单实现的:

jest.mock('./../../models/PerformancesResultsReader');
Run Code Online (Sandbox Code Playgroud)

这样,所有方法都简单地返回undefined

现在,我试图添加一个手动模拟而不是自动模拟。

这是PerformancesResultsReader.js模拟代码:

console.log('including mock!');

const mock = jest.fn().mockImplementation(() => {
    return {
        read: () => {
            console.log('mocked');
        }
    };
});

export default mock;
Run Code Online (Sandbox Code Playgroud)

我试图将其放置__mocks__在与我正在测试的文件相同级别的子文件夹中,并且尝试将其也放置在要模拟的导入模块的同一文件夹中。在这两种情况下,它似乎根本没有被调用(第一个控制台日志永远不会被打印)。

请问我做错了什么吗?

typescript reactjs jestjs react-redux

4
推荐指数
1
解决办法
2031
查看次数

监视 redux 调度方法

我是一个开玩笑的新手,我正在为我的 React 应用程序编写单元测试,该应用程序使用 redux 并使用 Typescript 编写。

我的容器组件包含这段代码:

const mapDispatchToProps = (dispatch: Dispatch<any>) => ({
    onSelectScenario: (selectedScenario: any) => {
        dispatch(selectScenario(selectedScenario));
    }
});
Run Code Online (Sandbox Code Playgroud)

我想编写一个单元测试,检查当我从测试 ( onSelectScenario) 调用此道具时,dispatch将使用正确的参数调用该方法。

知道如何监视这个吗dispatch

这是我的单元测试,我在其中调用 prop 方法:

it('should dispatch', () => {
    component.props().onSelectScenario('New Selected Scenario');
});
Run Code Online (Sandbox Code Playgroud)

这是测试的设置,我在其中定义提供模拟商店的容器组件:

const mockStore = configureMockStore();
let store = mockStore({
    scenarios: ['Scenario 1', 'Scenario 2']
});
let component: ShallowWrapper<any, any>;

describe('ScenarioListGroupContainer Component', () => {
    beforeEach(() => {
        component = shallow(<ScenarioListGroupContainer store={store} />);
    });
    // ... …
Run Code Online (Sandbox Code Playgroud)

reactjs jestjs redux react-redux react-tsx

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

以迭代的方式查找对象的深度

我正在编写一个计算物体深度的函数.

这是我的递归版本,似乎按预期工作:

function findDepth(obj, firstCall = true) {
  if (firstCall && typeof obj !== "object") {
    return -1;
  }
  return Object.keys(obj).reduce((max, k) => {
    if (typeof obj[k] === "object" && obj[k] !== null) {
      const val = findDepth(obj[k], false) + 1;
      if (val > max) {
        max = val;
      }
    }
    return max;
  }, 1);
}

const input1 = {
  a: {
    b: "test",
    c: {
      d: {
        e: {
          f: [1, 2, 3],
          g: {
            a: null,
            z: { …
Run Code Online (Sandbox Code Playgroud)

javascript algorithm ecmascript-6

4
推荐指数
1
解决办法
63
查看次数

React Router - 未捕获的 SyntaxError: Unexpected token &lt; 使用参数刷新 URL 时

我正在使用react 16and react router 4, webpackand webpack dev server

我确实有以下几点Route

<Route path="/company/:symbol" render={this.getCompanyPageRoute} />
Run Code Online (Sandbox Code Playgroud)

我确实通过以下方式导航到这条路线:

this.props.history.push('/company/blablabla');
Run Code Online (Sandbox Code Playgroud)

一切正常。但是,如果我使用此 URL 刷新页面,则会出现以下错误:

未捕获的语法错误:意外的标记 <

我已经看到有几个关于这个错误的帖子,但我并没有按照这些链接来解决这个问题。

javascript typescript reactjs react-router react-router-v4

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