小编Geo*_*uer的帖子

如何在一批任务中处理部分成功?

我有3个应该并行运行的任务.我需要等待所有3,然后继续处理他们的结果.所以类似于:

var results = await Task.WhenAll(task1, task2, task3);
return process(results);
Run Code Online (Sandbox Code Playgroud)

当所有3个任务成功完成时,此工作正常.但是,如果其中一个失败,我会得到一个异常的异常.这不是我想要的.如果这些任务中的任何一个抛出InvalidOperationException我可以继续处理,我只需要该process方法就可以访问抛出的异常.

我意识到我可以try...catch在任务中,但这似乎不是一个黑客.除了在语义上不正确(任务DID失败 - 它不应该成功返回),如果我采用这种方法,因为结果可以成功或返回异常,我将不得不返回自定义类型.Task<T>然而,该对象已经暴露了一个Exception通道,所以我宁愿不做双重任务而只是使用已经存在的东西.

.net error-handling async-await

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

如何减少提取文件所需的时间?

我在C#中创建了一个程序,它处理了大约30个压缩文件夹,总共有35000个文件.我的目的是读取每个文件以处理其信息.截至目前,我的代码提取所有文件夹,然后读取文件.这个过程的问题是它需要大约15-20分钟,这是很多.

我使用以下代码来提取文件:

void ExtractFile(string zipfile, string path)
{
    ZipFile zip = ZipFile.Read(zipfile);
    zip.ExtractAll(path);
}
Run Code Online (Sandbox Code Playgroud)

提取部分是花费最多时间处理的部分.我需要减少这个时间.有没有办法我可以读取压缩文件夹中的文件内容而不提取它们?或者,如果有人知道任何其他方式可以帮助我减少此代码的时间?

提前致谢

c# extract zipfile dotnetzip

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

如何在一个特定序列化中序列化除特定属性之外的所有属性

我有一个看起来像这样的对象(显然简化)

public class Person {
  public string Name { get; set; }
  public int Age { get; set; }
  public string ETag { get { return ... } }
}
Run Code Online (Sandbox Code Playgroud)

我想要的是ETag是省略ETag属性的对象的json序列化的哈希(以防止递归循环).但是,我不能只使用一个[JsonIgnore]属性,因为在其他时候我希望能够json序列化整个事物.

所以我想要的是这样的

public string ETag { get {
   return Hash(JsonConvert.Serialize(this, p => p.Ignore(x=>x.ETag) ));
}}
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这不是一个存在的API.我将如何实现类似的目标?

c# serialization json json.net

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

显示:table-column有什么作用?

根据mdn display: table-column应该

表现得像HTML元素.

但据我所知,<col>元素没有显示模式,它们实际上只是html的粗略边缘,它定义了标记中的样式.那么世界上table-columncss应该做什么呢?

css css-tables

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

NLog - 禁用特定记录器

我想将所有记录器设置为记录到一个文件,除了特定类的记录器之外。我似乎不知道该怎么做。目前我正在尝试以下 nlog.config

无论我做什么,拦截器都会记录

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
        <target name="file" xsi:type="File" 
                fileName="${basedir}/logs/log.log" 
                maxArchiveFiles="1" archiveAboveSize="1000000" />
    </targets>
    <rules>
        <logger name="*" minlevel="Debug" writeTo="file" />
        <logger name="MyApp.DbInterceptionConfig+LoggingEFInterceptor" minlevel="Info" writeTo="file" />

    </rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)

nlog

6
推荐指数
2
解决办法
6846
查看次数

如何重新包装Linq表达式树

我有一个Expression<Func<Entity, string>>可以是属性或嵌套属性访问器

y => y.SearchColumn
Run Code Online (Sandbox Code Playgroud)

要么

y => y.SubItem.SubColumn
Run Code Online (Sandbox Code Playgroud)

我正在动态构建一个表达式树,并希望像这样得到一个InvokeExpression

x => x.SearchColumn.Contains("foo");
x => x.Sub.SearchColumn.Contains("foo");
Run Code Online (Sandbox Code Playgroud)

我敢肯定,我可以解开表达身体,然后部分应用X ParameterExpression到它,但我想不通的神奇咒语,使这种情况发生

所以我有类似的东西

Expression<Func<Entity, string>> createContains(Expression<Func<Entity, string>> accessor) {
    var stringContains = typeof(String).GetMethod("Contains", new [] { typeof(String) });
    var pe = Expression.Parameter(typeof(T), "__x4326");
    return Expression.Lambda<Func<Entity, bool>>(
        Expression.Call(
            curryExpression(accessor.Body, pe),
            stringContains,
            Expression.Constant("foo")
        )
        , pe
    );              
}

    static Expression curryExpression(Expression from, ParameterExpression parameter) {
        // this doesn't handle the sub-property scenario
        return Expression.Property(parameter, ((MemberExpression) from).Member.Name);
        //I thought this would work but it …
Run Code Online (Sandbox Code Playgroud)

c# linq expression metaprogramming expression-trees

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

.Net Core是否生成与标准.Net相同的IL?

我们宣布 .Net Core正在重命名为1.0(令人困惑,但很好,无论如何).汉塞尔曼说

 It doesn't yet support VB or F#.
Run Code Online (Sandbox Code Playgroud)

这让我觉得我错过了什么.我的逻辑如下工作.

在C#中使用两个简单的简单Hello World应用程序,在VB中使用另一个.假设你保持简单,在使用标准的msbuild/.Net框架进行编译时,你应该得到相同的IL.我的理解是,你可以让.Net核心运行同样的dll,因为它是该级别的所有IL.那么为什么说它不支持VB呢?是否它不支持它超出简单的情况(你可能会参考vb特定的东西)?或者,编译.Net Framework与.Net Core时生成的实际IL是不同的,而且还没有VB/F#编译器呢?

.net .net-core

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

CookieAuthenticationOptions.AuthenticationType用于什么?

在我的应用程序的Asp.Net Identity Auth中间件设置中我有

app.UseCookieAuthentication(new CookieAuthenticationOptions {
    LoginPath = new PathString("/Login/"),
    //AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    Provider = new CookieAuthenticationProvider {
    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<MyUserManager, MyUser>(
                        TimeSpan.FromMinutes(30),
                        (manager, user) => manager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie)
                    ),
    },
});
Run Code Online (Sandbox Code Playgroud)

我从另一个应用程序复制了这个,我只是注意到如果我取消注释该AuthenticationType行,登录成功(我从我的控制器写入的记录器中获得成功消息)但总是重定向回登录屏幕.

CookieAuthenticationOptions文档中

选项中的AuthenticationType对应于IIdentity AuthenticationType属性.可以分配不同的值,以便在管道中多次使用相同的身份验证中间件类型.(继承自AuthenticationOptions.)

我真的不明白这是什么意思,为什么会导致我的登录请求被重定向(成功登录后,不会少),也没有人知道这个选项是有用的.

asp.net authentication cookies asp.net-identity

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

为什么引导程序使用 '!important' 响应类?

Bootstrap 响应式实用程序都在使用!important,这对我来说没有多大意义。它不像继承那样进行继承col-xx-xx。我想知道他们为什么添加!important这些课程。有人提到这是为了特异性。这意味着什么?此外,显示和隐藏类似乎也使用!important。为什么?

css twitter-bootstrap

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

是否可以将Json.Net设置为忽略$ type?

在json反序列化攻击中观看此视频,它显示了这一点json,可用于在任何反序列化它的应用程序上触发任意代码执行.

使用ObjectDataProvider执行任意代码

现在在我的应用程序中,我甚至从未使用过类型的json.我总是反序列化为动态对象或JObjects.在$type今天早上另一次无关的谈话之前,我甚至都不知道这个房产.

在我的json设置中是否有一种方法可以告诉它永远不会写或读取此属性?这不是我想要的东西.

c# json json.net

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