小编Jas*_*ban的帖子

IDisposable,ObjectDisposedException和线程安全类型

bool disposed为了ObjectDisposedException在所有主要暴露方法的开头有条件地抛出一个线程安全类型,有没有必要跟踪经典字段?

我已经在网上的几个地方看到了这种模式,但我不确定作者是否正确使用它,所以这个问题假定它们是.

在这种情况下,似乎disposed除了条件评估之外确保条件为真的唯一方法是在每个公开成员的整个主体上使用诸如lock()之类的同步机制,包括Dispose(bool)方法.难道这不会使类型再次有效地单线程吗?

如果这是真的,那么使用它就没有意义了,因此你不能在某些IDisposable实现中依赖ObjectDisposedException机制 - 那么为什么我们不采用这种机制,如果没有必要呢?

====

我猜IDisposable和ObjectDisposedException只是不一起用于线程安全类型.

c# idisposable thread-safety objectdisposedexception

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

自定义模板化asp.net控件的双向数据绑定

这个问题最初是关于双向绑定工作,但由于缺乏具体的答案和其他方面的进展,我一直在更新它 - 你可以检查编辑历史,但我认为这是更好的明晰.

下面的代码列表允许单个对象与模板化控件进行双向数据绑定.我想以最简单的方式扩展此示例,以允许为最根对象的复杂类型属性嵌套类似的双向数据绑定启用的模板化控件.例如,SampleFormData有一个属性List<string> Items.我希望能够在最根本模板(从此代码清单)中绑定到此列表,并在可编辑的文本框列表中显示字符串数据,可能还有插入,删除,重新绑定输入的命令-changes(返回绑定对象的List属性).此外,如果这是一个复杂类型的列表(SampleFormChildData而不是字符串),则SampleSpecificEntryForm可以在列表中使用新的嵌入式,绑定到每个列表的项目,如转发器.如果作者如此选择,那么直到叶子简单的属性.ui-fields不需要自动生成,只能用于绑定.

注意:这种情况List<string>很特殊,因为即使内置绑定也不能直接处理字符串作为DataItem - 直接绑定到字符串作为列表中的项目不是必需的,但肯定是有价值的.

这与a不同,FormView因为它不是为了期望绑定到项目列表中的一个,而是仅绑定到在viewstate中持久存在的单个项目.与FormView不同,它只有一个类似于FormView的EditTemplate的默认模板.同样,绑定到类似集合的属性也只有一个视图 - 编辑.没有选择行然后编辑.一切都是可编辑的.目的是使双向绑定表单更容易构建.

在我看来,应该有两种绑定. SingleEntityBindingCollectionBinding. SingleEntityBinding将单个对象实例作为数据源(作为原型SampleSpecificEntryForm),同时CollectionBinding可以绑定到它的父级SingleEntityBinding,其属性DataSourceID="EntryForm1" DataMember="Items"DataList1下面的代码示例中所示.任何一种类型都应支持任一类型的嵌套.对支持对象的数据进行插入/更改/删除类型操作等列表操作是表单作者的责任; 但是,这种机制实施起来相对简单.

这是一些代码,希望它能帮到某些人.对于这个布局目标,最好的建议是200分......

using System.ComponentModel;
using System.Collections.Specialized;
using System.Collections.Generic;

namespace System.Web.UI.WebControls.Special
{
    [Serializable]
    public class SampleFormData
    {
        public string SampleString { get; set; }
        public int SampleInt { get; set; }
        public List<string> Items { get; set; }

        public SampleFormData() …
Run Code Online (Sandbox Code Playgroud)

c# asp.net ibindabletemplate 2-way-object-databinding

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

各种Promises实现中失败`reason`的打字稿类型?

d.ts各种promise库的当前定义文件似乎放弃了提供给故障回调的数据类型.

when.d.ts:

interface Deferred<T> {
    notify(update: any): void;
    promise: Promise<T>;
    reject(reason: any): void;
    resolve(value?: T): void;
    resolve(value?: Promise<T>): void;
}
Run Code Online (Sandbox Code Playgroud)

qdts:

interface Deferred<T> {
    promise: Promise<T>;
    resolve(value: T): void;
    reject(reason: any): void;
    notify(value: any): void;
    makeNodeResolver(): (reason: any, value: T) => void;
}
Run Code Online (Sandbox Code Playgroud)

jquery.d.ts(promise-ish):

fail(failCallback1?: JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[], ...failCallbacksN: Array<JQueryPromiseCallback<any>|JQueryPromiseCallback<any>[]>): JQueryPromise<T>;
Run Code Online (Sandbox Code Playgroud)

我没有看到任何承诺/ A +规格的建议,我认为reason 不能键入.

我没有尝试它qdts但类型的信息似乎迷失在从过渡'T'U发生,我不完全理解为什么有如此-我尝试(机械增加'N'F类型的参数<T>'O'G类型参数<U>并按照我认为的那样输入内容,这主要{}是因为它是新添加的类型参数的类型.

有没有理由不能给他们自己的类型参数?是否有可以完全打字的承诺结构?

type-safety promise typescript

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

Web服务器 - 如何解析请求?异步流标记器?

我试图用异步套接字编程风格在C#中创建一个简单的Web服务器.目的非常狭窄 - 一个Comet服务器(http长轮询).

我已经运行了Windows服务,接受连接,将请求信息转储到控制台并将简单的固定内容返回给客户端.

现在,我无法找到一种可管理的策略来异步安全地解析请求数据.我以前写过同步LL1解析器.我不确定LL1 Parser对HTTP是否合适或必要.我不知道如何异步地标记输入流.我能想到的是每个客户端都有一个输入缓冲区,读入它,然后将其复制到StringBuilder并定期检查是否有完整的请求.但这似乎效率低下,可能导致难以调试/维护代码.

此外,完全接收请求和发送响应的连接有两个阶段 - 在这种情况下,在一些延迟之后.一旦请求得到验证并可操作,我才计划在长轮询管理器中注册连接.但是,行为不端的客户端可能会继续发送数据并填充缓冲区,因此我认为我需要在响应阶段继续监视并清空输入流,对吧?

对此有任何指导意见.

我想第一步是知道是否有可能异步地有效地标记网络流并且没有大的中间缓冲区.即使没有合适的解析器,创建令牌化器的相同挑战也适用于一次读取输入的"行",甚至读取直到双空行(一个大的令牌).我不想一次从网络读取一个字节,但我也不想读取太多字节而必须将它们存储在某个中间缓冲区中,对吧?

parsing asynchronous http stream tokenize

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

EventStore事件和其他功能的部分排序

我正在尝试将EventStore评估为服务器软件内部的可靠排队机制.

MSMQ作为替代方案失败,因为它无法在消息的"对话"中支持部分排序​​,有序消息.并且因为它的4MB消息大小限制(可以通过部分排序来克服).SQL Service Broker确实支持部分排序​​,但是以编程方式设置和管理是一件很痛苦的事.

由于EventStore上的文档确实很少,具有EventStore经验的人可以帮助解决以下问题吗?

  • EventStore是否支持事件的事务处理 - 也就是说,如果处理失败,是否可以回退出列?
  • 在各种线程,进程或机器中有多个读取器,EventStore是否强制将每个事件(仅)分配给一个读取器(一次,可能在事务期间)
  • 假设以上是可能的,可以以任何顺序同时读取不同"对话"上的事件,而同一对话中的消息可以单独和有序地读取吗?
  • 我读到EventStore基本上是"至少一次"交付.是否可以使用某些存储提供商来确保"一次性"交付?
  • 如何处理"毒药"事件?处理期间出错的事件.也许错误本质上是暂时的,可以重试.也许它是永久性的,需要行政干预.
  • 如有必要,可以手动操作EventStore存储吗?可以在其他读者继续阅读时完成吗?

(我读到存储引擎上的事务不是必需的,但我仍然使用事务语言来表示在EventStore级别替换事务的任何事情.如果在从事务切换到任何事务中有重要的功能后果,请对它们进行评论我并不需要了解每一个环节向右走,只需要希望,能够用来购买更多的时间来试验.)

cqrs

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

TypeScript增强的SharedWorker PortMessage通道契约

对于Windows和Workers之间的RPC式通信通道,利用TypeScript语言功能的优秀通用设计是什么?

SharedWorkers是JavaScript代码清单,由浏览器在特定浏览器窗口的上下文之外运行.单个SharedWorker(通过脚本URI)由所有打开的浏览器窗口共享,其自己的代码请求它.Windows和工作人员通过纠缠的worker.port对象进行通信,发送者可以使用postMessage()并且接收者可以从中侦听"消息"事件.允许发布的最一致支持的类型是单个string,可以很容易地JSON.stringify(ofSomeObject)但可以是任何自定义格式.

TypeScript是JavaScript的扩展,它提供了一些有用的类型安全性和其他有用的应用程序代码管理功能.

远程过程调用库(如WCF)使用由通信通道的两个(所有)方共享的SOA样式的Contract接口,并抽象出序列化和反序列化请求的单调且容易出错的必要性.


浏览器Windows与其Worker之间的通信类似于RPC,因为我们无法通过通道将代码作为数据传递.一个主要区别是通信只是单向的.发件人可以发布邮件但不能阻止并等待结果.相反,应用程序层负责将接收的数据与发送的请求进行匹配(如果适用).

为了利用TypeScript的输入功能,在我看来,遵循契约范式是一个不错的选择.我们需要:

  1. 每个接收者的服务合同的一个接口.
  2. 每个合同的接收者实施
  3. 每个合同的代理实施

首先,我们需要教一些关于在lib.d.ts定义上构建的SharedWorkers的TypeScript.SharedWorker.d.ts:

interface ConnectEvent extends Event {
    ports: MessagePort[];
};

interface SharedWorker extends EventTarget, AbstractWorker {
    port: MessagePort;
};

declare var SharedWorker: {
    prototype: SharedWorker;
    new (scriptURL: any, name: any): SharedWorker;
    new (scriptURL: any): SharedWorker;
}
Run Code Online (Sandbox Code Playgroud)

在WCF中,我们有一个环境OperationContext来了解连接的客户端.在大多数情况下,我们还会返回一个值来发送对请求的响应.

在JavaScript中,我们没有ThreadStatic,我怀疑我们是否可以可靠地提供环境等效的OperationContext.(每个代码清单都是单线程运行的,但异步方式是通过计时器回调实现的,并且可能由Worker实现使用,我认为我们无法正确跟踪它.)

使用MessagePorts,我们无法返回值.相反,我们必须将另一个单向响应发送回请求者,因此我们需要一个返回MessagePort的句柄.但是,此返回MessagePort不能成为Contact的一部分,因为Proxy实现不需要它.我能想到的就是创建一个实现类的新实例,该实例类使用接收器/代理特定的差异初始化,例如返回MessagePort和任何其他数据,例如广播消息的所有连接的MessagePort的数组.然后,实现的成员方法可以引用它们,因为它们可能是OperationContext.

以及消息事件处理程序的示例:

worker.port.addEventListener('message', (e: MessageEvent) => {
    var data = JSON.parse(e.data);
    new ReceiverImplementation(worker.port)[data.name].apply(this, data.params);
}, false);
Run Code Online (Sandbox Code Playgroud)

代理实现可能具有以下功能:

SessionLogin(username: string) {
    this.worker.port.postMessage(Command('SessionLogin', arguments));
}
Run Code Online (Sandbox Code Playgroud)

消息事件处理程序将接收的参数应用于指定的方法名称.ReceiverImplementation对象应该是独立的,可能来自任何其他类,因为我们希望避免方法名称冲突.也许不是 - …

javascript rpc json-rpc web-worker typescript

5
推荐指数
0
解决办法
1389
查看次数

拦截(也许取消)页面的鼠标/键盘事件处理程序

我正在尝试创建一个处理所选文本的Chrome扩展程序.一些网站页面的其他可选文本内容具有导航到新页面的点击/鼠标上/下事件处理程序.

是否有一种方法可以从后台或内容脚本暂时禁用(和恢复)页面的任意事件处理程序,而不会干扰本机文本选择

最糟糕的情况我想的是分离,克隆体html,允许选择,然后恢复绑定的原始.好像很麻烦.

谢谢!

textselection google-chrome-extension

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

使用 leftOuterJoin,不需要 .DefaultIfEmpty()

leftOuterJoin MSDN上查询表达式的文档通过示例反复暗示,使用时leftOuterJoin .. on .. into ..仍然必须使用它.DefaultIfEmpty()才能达到预期的效果。

我不认为这是必要的,因为我在这两项测试中得到了相同的结果,唯一的区别在于第二个测试没有.DefaultIfEpmty()

type Test = A | B | C
let G = [| A; B; C|]
let H = [| A; C; C|]

printfn "%A" <| query {
    for g in G do
    leftOuterJoin h in H on (g = h) into I
    for i in I.DefaultIfEmpty() do 
    select (g, i)}

printfn "%A" <| query {
    for g in G do
    leftOuterJoin h in H on (g …
Run Code Online (Sandbox Code Playgroud)

f# query-expressions

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

从Windows交叉编译Raspberry Pi 3 B的裸金属Rust

试图关注 这个博客,但是在Windows和最新的Rust上.在我看来,做这样事情的正确方法是经常改变Rust,所以我希望有一个最新的Windows改编.

到目前为止我尝试过的:

我安装了gcc-arm-embedded.

我有未经证实的部分成功手动交叉编译libcore,但后来我切换到使用推荐xargo,其中的功能(我读)正在最终被包含在Cargo中.虽然我不太了解它,但我希望能够找到我可以编写/运行代码的部分,然后我可以回过头来更好地理解编译.

有了japaric的非常棒的帮助,我能够让"aarch64"有针对性的构建工作来生成.o文件(截至此特定提交).

这部分似乎验证:

$ file target/aarch64-raspi3-none-elf/release/deps/rust_rasp-ed0c2377e0a7df81.o
target/aarch64-raspi3-none-elf/release/deps/rust_rasp-ed0c2377e0a7df81.o: ELF 64-bit LSB relocatable, ARM aarch64, version 1 (SYSV), not stripped
Run Code Online (Sandbox Code Playgroud)

当我尝试使用GNU Arm嵌入式工具链链接器时,我得到:

$ arm-none-eabi-gcc -O0 -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -nostartfiles target/aarch64-raspi3-none-elf/release/deps/rust_rasp-ed0c2377e0a7df81.o -o kernel.elf target/aarch64-raspi3-none-elf/release/deps/rust_rasp-ed0c2377e0a7df81.o: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

#rust IRC聊天室有用的人告诉我rpi3是aarch64,而不是arm,所以我需要找到一个aarch64链接器......

windows llvm cross-compiling rust raspberry-pi3

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

在 azure 中设置 showPii

I\xe2\x80\x99m 配置我的 Passport/express/node azure 应用服务网站以进行单租户 azure 广告登录。我可以在本地主机上成功登录,但是当我发布网站时,我得到{"code":400,"message":"IDX10205: Issuer validation failed. Issuer: \'[PII is hidden]\'. Did not match: validationParameters.ValidIssuer: \'[PII is hidden]\' or validationParameters.ValidIssuers: \'[PII is hidden]\'."}

\n\n

我想我需要在某处设置 showPII 才能查看该 PII 并诊断/解决问题。我们如何在Azure节点中控制这个标志?

\n

azure azure-active-directory passport.js azure-web-app-service passport-azure-ad

5
推荐指数
0
解决办法
946
查看次数