小编Tor*_*ory的帖子

使用抽象类作为方法参数和约束到所述抽象类的泛型参数之间是否有任何明显的区别?

使用之间有什么重大区别吗?

 public TValue SomeFunctionA<TValue>(BaseClass<TValue> bc)
Run Code Online (Sandbox Code Playgroud)

过度

 public TValue SomeFunctionB<TValue, TBaseClass>(TBaseClass bc)
      where TBaseClass : BaseClass<TValue>
Run Code Online (Sandbox Code Playgroud)

我做了一些测试,我似乎找不到任何区别.所有派生类的行为都应该如此(覆盖某些东西,新东西等).

如果'TValue'是已知的,例如(除了现在你可以使用运算符):

 public int SomeFunctionAInt(BaseClass<int> bc)
Run Code Online (Sandbox Code Playgroud)

 public int SomeFunctionBInt<TBaseClass>(TBaseClass bc)
      where TBaseClass : BaseClass<int>
Run Code Online (Sandbox Code Playgroud)

.net c# vb.net generics abstract-class

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

ThreadPool或Task是否适合用于服务器?

我正在尝试转换一些代码,只是创建一个新线程来运行一个函数,使其使用一个线程池甚至任务并行库.我这样做是因为我知道尽管工作线程的函数可以无限期地运行(理论上),但每个线程将花费大部分时间无所事事.我还想要一些东西来减少创建和销毁工作线程的开销,因为连接可能会超时或创建新的工作线程.那个 - 并且看到CLRProfiler显示7836个线程在62小时的测试运行之后/之后最终确定有点令人不安,只有一个(如果挑剔的)设备发送消息.

这就是我想要做的事情:

主线程.

1.)让TCPListener接受TcpClient

2.)触发使用该TcpClient的工作线程

3.)如果我们没有被告知停止,请返回步骤1.

工作线程(用于池/任务)

1.)检查我们是否有来自TcpClient的消息

2.)如果是这样,解析消息,发送到数据库,并睡眠1秒钟.

3.)否则,睡眠1毫秒.

4.)如果我们没有被告知停止并且没有超时,请返回步骤1.

这是最初的方法:

private AutoResetEvent connectionWaitHandle = new AutoResetEvent(false);
private static bool stop = false;

private void MainThread()
{
    TcpListener universalListener = new TcpListener(IPAddress.Any, currentSettings.ListeningPort);
    universalListener.Start();

    while (!stop)
    {
        IAsyncResult result = universalListener.BeginAcceptTcpClient(WorkerThread, universalListener);
        connectionWaitHandle.WaitOne();
        connectionWaitHandle.Reset();
    }
}

private void WorkerThread(IAsyncResult result)
{
    TcpListener listener = result.AsyncState as TcpListener;

    if (listener == null)
    {
        connectionWaitHandle.Set();
        return;
    }

    TcpClient client = listener.EndAcceptTcpClient(result);
    connectionWaitHandle.Set();

    NetworkStream netStream = null;

    bool timedout = …
Run Code Online (Sandbox Code Playgroud)

.net c# tcp threadpool task-parallel-library

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

无法以编程方式在C:\ inetpub\wwwroot中创建文件

我在ASP.NET网页的代码后面有一个函数,它创建一个文件然后用javascript命令打开它.这适用于IDE - 它创建文件,询问我要保存文件的位置,我可以保存它等等 - 但是当我安装网站并测试它时,我得到一个UnauthorizedAccessException而只是试图创建C:\ inetpub\wwwroot中文件的目录.

令人沮丧的是,我有一个类似于在服务中运行的功能,并且在C:\ inetpub\wwwroot中创建其目录和文件就好了.

我需要做些什么才能让它适用于网页?

 if(!Directory.Exists(directory))
 {
      Directory.CreateDirectory(directory);
 }

 StreamWriter SW = new StreamWriter(fullpath, false, Encoding.Unicode);

 SW.WriteLine(/*stuff*/);

 SW.Close();
Run Code Online (Sandbox Code Playgroud)

c# asp.net permission-denied

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