小编spe*_*der的帖子

取消Socket.xxxxAsync调用

在调用Socket.Shutdown,Socket.Close和Socket.Disconnect之后,看来Socket.ReceiveAsync不会中止.尝试重用ReceiveAsync调用中使用的SocketAsycEventArgs对象(在文档中作为最佳实践建议)会导致错误:

使用此SocketAsyncEventArgs实例已在进行异步套接字操作

我需要做些什么才能让ReceiveAsync释放它对这个SocketAsyncEventArgs实例的控制?

编辑:我已经解决了这个问题,标记了一个待处理的接收,并且在接收到之前没有进行任何清理(即已完成调度).虽然感觉不太好.它不能像WebRequest API一样被中止吗?

.net c# sockets

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

.net集合用于快速插入/删除

我需要维护一个非常短暂且频繁上下的连接客户名单.由于潜在的客户端数量,我需要一个支持快速插入/删除的集合.建议?

.net c# collections

12
推荐指数
2
解决办法
9653
查看次数

字典查找需要锁定吗?

lock(dictionaryX)
{
   dictionaryX.TryGetValue(key, out value);
}
Run Code Online (Sandbox Code Playgroud)

在查找字典时是否需要锁定?

程序是多线程的,并且在向dict添加键/值时.dict被锁定了.

c# lookup multithreading dictionary locking

12
推荐指数
2
解决办法
8483
查看次数

不了解Type.IsAssignableFrom

int i=1;
long longOne=i; //assignment works fine
//...but
bool canAssign=(typeof(long).IsAssignableFrom(typeof(int))); //false
Run Code Online (Sandbox Code Playgroud)

为什么是canAssign假的?

c# types

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

异步世界中的故障安全处理

在同步世界中,C#使所有事物的管理变得非常容易:

using(IDisposable someDisposable=bla.bla())
{
     //do our bidding
}
//don't worry too much about it
Run Code Online (Sandbox Code Playgroud)

但是,当我们进行异步时,我们不再具有using块的便利性.我遇到的最好的策略之一是CCR迭代器,它允许我们使用异步代码"好像它是同步的".这意味着我们可以将我们的using块保留在迭代器处理程序中,而不会在何时处理和捕获需要处理的所有情况的复杂决策中陷入困境.

然而,在许多情况下,调用CCR看起来有点矫枉过正,说实话,虽然我对CCR很满意,但对于初学者来说它看起来像是双重的.

所以我的问题是:当一次性物品必须超出直接范围时,管理一个人的IDisposable还有哪些其他策略?

c# idisposable

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

单次活动订阅

我相信这是不可能的,但我会问.

为了对事件进行单次订阅,我经常发现自己使用这种(自我发明的)模式:

EventHandler handler=null;
handler = (sender, e) =>
{
    SomeEvent -= handler;
    Initialize();
};
SomeEvent += handler;
Run Code Online (Sandbox Code Playgroud)

这是相当多的锅炉板,它也使Resharper对改装后的瓶盖抱怨.有没有办法将此模式转换为扩展方法或类似方法?这样做的更好方法是什么?

理想情况下,我喜欢这样的东西:

SomeEvent.OneShot(handler)
Run Code Online (Sandbox Code Playgroud)

c# events boilerplate

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

我有什么版本的Resharper?

我不记得是否购买了C#版本或C#+ VB版本,我想在购买升级到R#6时需要了解这一点.

我无法在任何地方找到关于对话框.有人可以帮忙吗?

resharper version

12
推荐指数
2
解决办法
4006
查看次数

微软CCR是否获得了任何吸引力?

微软的并发和协调运行时完全保存了一个项目,该项目遇到了死锁的重大问题.从那时起,我发现我越来越频繁地使用它来处理需要异步编码的任何事情,从而产生比以前更快更快的结果.我可以诚实地说它改变了我对多线程/多核开发的看法.尽管我个人对CCR很感兴趣,但在网络上似乎没有什么嗡嗡声,并且想知道是否有人可以提供任何理由.是否有更好的替代方案,或者是MS缺乏推广,还是人们对现有工具感到满意?

ccr

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

快速IComparer?

在我重新发明轮子之前,是否有一些框架方式来创建IComparer<T>一个Func<T,T,int>

编辑

IIRC(已经有一段时间了)Java支持匿名接口实现.这样的构造是否存在于C#中,还是代表被认为是完全替代?

.net c# icomparer

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

如何在C#中编写一个好的反复出现的模板模式(CRTP)

前段时间我想创建自己的数据映射器,它比平均ORM简单得多.这样做我发现需要访问我的基类中继承类的类型信息.我的第一个想法是反射,但它太慢了(如果你使用反射,请查看Fasterflect,因为它"几乎"消除了反射的性能问题).

所以我转向了一个解决方案,我后来发现它有自己的名字:奇怪的重复模板模式.这主要解决了我的问题,但学习如何正确实现这种模式有点挑战.我必须解决的两个主要问题是:

1)如何让我的消费代码与我的通用对象一起使用而无需知道创建对象的通用参数?

2)如何在C#中继承静态字段?

具有挑战性的部分实际上是在弄清问题.一旦我意识到我需要做什么,解决这些问题就很容易了.如果你发现自己需要CRTP,你可能会发现自己需要回答这些问题......它们似乎是相辅相成的.

c# crtp

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