我终于知道我的代码出了什么问题,但我不知道如何修复它。我有一些后台进程运行在一个单独的线程上,执行一些数据库维护任务。下面是正在发生的事情的一个例子:
//Both processes share the same instance of ISessionFactory
//but open separate ISessions
//This is running on it's own thread
public void ShortRunningTask()
{
using(var session = _sessionFactory.OpenSession())
最近,我在我们的系统中发现了一个错误,其中共享了dll中的一个属性。在ASP.Net的情况下,这会导致线程安全问题。
protected static object Data { get; set; }
为了用尽可能小的更改来修复这个问题,我交换了内部属性来使用HttpContext.Current.Items来存储和检索值。这适用于我们的网站。
protected static object Data
{
get
{
return HttpContext.Current.Items[DataKey] as object;
}
set
{
我们的应用程序遵循维护DataContext每线程/HttpContext的方法,使用Richard在其上概述的DataContextFactory类,包括对理查德提到的密钥的修改(使用type.AssemblyQualifiedName)。
解决方案似乎很好(虽然在大多数情况下采用不同的方法可能更好),但是在使用此方法时,我看到应用程序中出现了间歇性错误:
ExecuteReader需要一个开放和可用的连接。连接的当前状态已关闭。
我使用以下属性访问整个代码中的数据文本,这是datacontext类的一部分:
/// <summary>
/// Returns the c
这是我的密码:
<ThreadStatic()>
Dim _GlobalConnection As TdConnection
Public Property GlobalConnection As TdConnection
Get
If _GlobalConnection Is Nothing Then
_GlobalConnection = New TdConnection
End If
If _GlobalConnection.State <> ConnectionState.Open
我有下面的测试程序,其中我使用了一个ThreadStatic变量,当我尝试这段代码时,我得到了一个NullReferenceException。
using System;
using System.Threading;
namespace MiscTests
{
public class Person
{
public string Name { get; set; }
}
class Program
{
[ThreadStatic]
private static Person _person = n
忙着在现有的web应用程序上做一些工作,并关心ObjectContext在BaseRepository类中使用的线程安全性。导致我感到刺痛的代码是:
// within base repository
private SiteDataContext context;
public SitepDataContext Context
{
get
{
if (context == null)
context = new SiteDataContext();
re
我有一个Subject<T>,我要通过OnNext将条目发布到其中,过了一段时间,在负载下,我得到了这个异常:
System.NullReferenceException: Object reference not set to an instance of an object
at System.Diagnostics.ExceptionExtensions.PrepareForRethrow (System.Exception exception) [0x00000] in <filename unknown>:0
at System.Concurrency.Asy
当使用ASP时,我们可以从代码中的任何地方引用HttpContext.Current来获取当前的http上下文。
我想用HttpListener做一些类似的事情,这样我就可以在代码中的任何地方访问GET/POST数据等。我能为此引用一些全局对象吗,或者我需要在代码中显式地传递当前的HttpListenerContext对象吗?
' This is what I want to access
Dim Context As HttpListenerContext = Listener.EndGetContext(StateObject)
我正在向ReuseScope.Request注册服务,在某些情况下(请参阅下面),我得到了例外情况:
Error trying to resolve Service 'Ceco.ServiceStack.TestService.TestService' or one of its autowired dependencies (see inner exception for details).
基本上这个注册:
container.RegisterAutoWiredAs<FakeAgent, IAgent>().ReusedWithin(ReuseScope.Req
我编写了一些小的测试程序,并且很惊讶为什么lock {}解决方案的执行速度比没有锁的要快,但是在静态变量上使用了[ThreadStatic]属性。
ThreadStatic片段:
[ThreadStatic]
private static long ms_Acc;
public static void RunTest()
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
int one = 1;
for (int i = 0; i < 100 * 1000 * 1000; ++i) {
我有一个异步方法来执行多个异步任务。而且,我试图同时调用它不止一次,每次由于并发性问题,它都会被调用并失败,否则它就会完成执行。
该任务还使用了一个静态变量,并且能够使这个变量线程安全,因为每个变量都有自己的变量实例,所以我将其设置为ThreadStatic。
以下代码将说明我的意思:
public class Program
{
[ThreadStatic]
private static Account _account;
public static async Task Main()
{
await Task.WhenAll(Enumera
我已经将一个变量定义为ThreadStatic:
public static class MyApplicationContext {
[ThreadStatic]
public static bool Monitoring;
}
现在,我应该设置来自MainThread的变量监视(它已经启动了新线程):
this.syncThread = new Thread(this.InternalWork);
this.syncThread.SetApartmentState(ApartmentState.STA);
this.syncThread.Start();
// now, I
我正在学习F#,并且想实现ThreadStatic singleton。我使用的是我在一个类似的问题中发现的:
下面的代码编译器抱怨说The type 'MySingleton' does not have 'null' as a proper value。
type MySingleton =
private new () = {}
[<ThreadStatic>] [<DefaultValue>] static val mutable private instance:MySingleton
static m
我给自己写了一个多线程随机生成器
public static class MyRandGen
{
private static Random GlobalRandom = new Random();
[ThreadStatic]
private static Random ThreadRandom = new Random(SeedInitializer());
private static int SeedInitializer()
{
lock (GlobalRandom) return GlobalRandom.Next();