使用之间有什么重大区别吗?
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) 我正在尝试转换一些代码,只是创建一个新线程来运行一个函数,使其使用一个线程池甚至任务并行库.我这样做是因为我知道尽管工作线程的函数可以无限期地运行(理论上),但每个线程将花费大部分时间无所事事.我还想要一些东西来减少创建和销毁工作线程的开销,因为连接可能会超时或创建新的工作线程.那个 - 并且看到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) 我在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)