小编Uma*_*air的帖子

C#多线程 - 锁定

在某些情况下,我对锁定的概念感到有点困惑.让我解释一下,假设我有以下内容:

private readonly MyClass myObj;

private void Go(object state)
{
    // call an instance member of myObj, but does it need to be locked?
    myObj.SomeMethod(state);
}
Run Code Online (Sandbox Code Playgroud)

所以问题是在调用SomeMethod时是否需要锁定myObj?它是只读的,但是由于多个线程可以调用具有不同状态的myObj的实例方法SomeMethod,这不会导致问题吗?

谢谢.

c# multithreading locking

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

C# IMAP 客户端 - 与邮件服务器的多个连接

在尝试了许多 IMAP API 之后,我决定编写自己的 API(大多数都是内存消耗大的,有些只是不起作用,内存不足异常等等)。

无论如何,我已经编写了一些有效的代码(使用 TCPClient 对象)并且到目前为止效果很好。但是,我希望我的邮件服务器能够处理对邮件服务器的多个请求。例如:假设我获得了所有 UID 的列表,然后我循环浏览此列表,为每条消息获取我想要的内容(正文、标头等)。

问题是,我如何同时处理多个请求?因此,我可以一次处理 10 个 UID,而不是一次循环一个 UID。

这里最好的方法是什么?一组 TCP 客户端,每个客户端都有自己的线程?

谢谢。

c# imap tcp

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

SQL包含 - 仅在开始时匹配

出于某种原因,我无法在Google上找到答案!但是使用SQL包含函数我怎么能告诉它从字符串的开头开始,即我正在寻找等同于LIKE'some_term%'的全文.

我知道我可以使用,但由于我已经设置了全文索引,并且该表预计有数千行,我更愿意使用Contains.

谢谢!

sql t-sql sql-server full-text-search

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

同一订阅者的 Azure 服务总线多个实例

我有一种情况,我有一个 asp.net 核心应用程序,它在启动时将订阅客户端注册到一个主题 ( IHostedService),这个订阅客户端本质上有一个回调字典,每当它检测到一个主题中的新消息时,它就需要触发一个 id(这个 id 存储在消息属性中)。这本字典存在于应用程序的整个生命周期中,并且在内存中。

在 azure 上的 asp.net 核心应用程序服务的单个实例上一切正常,一旦我扩展到 2,我注意到有时订阅中的回调没有触发。这是有道理的,因为我们现在有两个实例,每个实例都有自己的回调字典存储。

所以我更新了代码来检查订阅的id是否存在,如果不存在,则放弃消息,如果存在,则获取回调并调用它。

public async Task HandleMessage(Microsoft.Azure.ServiceBus.Message message, CancellationToken cancellationToken)
{
    var queueItem = this.converter.DeserializeItem(message);

    var sessionId = // get the session id from the message
    if (string.IsNullOrEmpty(sessionId))
    {
         await this.subscriptionClient.AbandonAsync(message.SystemProperties.LockToken);
         return;
    }

    if (!this.subscriptions.TryGetValue(sessionId, out var subscription))
    {
        await this.subscriptionClient.AbandonAsync(message.SystemProperties.LockToken);
        return;
    }

    await subscription.Call(queueItem);

    // subscription was found and executed. Complete message
    await this.subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
}
Run Code Online (Sandbox Code Playgroud)

但是,问题仍然存在。我唯一的猜测是,在调用时AbandonAsync,同一个实例再次接收消息?

我想我真正想问的是,如果我有多个主题订阅客户端实例都指向该主题的同一个订阅者,是否所有实例都可以获得消息的副本?或者是不能保证的。

azureservicebus azure-servicebus-topics asp.net-core

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