小编qwe*_*234的帖子

当 $ErrorActionPreference 设置为 stop 时,您能否在 powershell 脚本中重定向错误?

我有一些 PowerShell 脚本,其中包含以下内容:

$ErrorActionPreference = "stop"
trap { Write-Error $_.Exception; }
Run Code Online (Sandbox Code Playgroud)

使用 powershell 重定向运算符从 powershell 窗口调用脚本时:

c:\somescript.ps1 2> c:\error.txt
Run Code Online (Sandbox Code Playgroud)

它只会将错误打印到 powershell 窗口,而不会将其重定向到文件。如果我从脚本中删除 $ErrorActionPreference = "stop",则重定向有效,但这不是一个可行的选择,因为我们需要脚本在遇到任何错误时终止。我也尝试过使用 '*>',但结果相同。

有什么方法可以将错误重定向到文件而无需更改所有脚本?

powershell

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

您可以将Expression <Func <T,bool >>谓词传递到linq Where语句中吗?

所以我有一个与此类似的方法:

public List<T> SomeFunction(Expression<Func<T, bool>> predicate) {
    return someList.Where(predicate).ToList();
}
Run Code Online (Sandbox Code Playgroud)

该代码不可编译,因为我无法将谓词传递给linq Where语句。有没有一种方法可以更改谓词以便与linq一起使用?

c#

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

带有列表的C#中的基本多线程

当您在多个线程中在C#中新建一个新列表时,每个线程是否都有自己的列表实例?

所以我的代码看起来类似于:

List<Item> _items = new List<Item>();

public void Method(List<List<Batch>> batches) {
    Parallel.ForEach(batches, parallelOptions, (batch, state) => CalculateAndAddToList(batch))
}

private void CalculateAndAddToList(List<Batch> batch) {
 //Some computations
    var localItems = new List<Item>();
    foreach(var b in batch) {
        //Computations of newItems
        localItems.AddRange(newItems);
    }
    _items.AddRange(items);
}
Run Code Online (Sandbox Code Playgroud)

我将随机得到一个错误:"目标数组不够长.检查destIndex和长度,以及数组的下限." 在该行说:"localItems.AddRange(newItems)".由于每个线程都在新建自己的localitems列表实例,我认为其他线程不会改变它,所以为什么在该行上出现错误?

我想我需要围绕"_items.AddRange(项目)"的锁,因为多个线程同时访问和更改共享领域"_items",但我还没有得到一个线程错误扔在这条线.

c# multithreading

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

标签 统计

c# ×2

multithreading ×1

powershell ×1