相关疑难解决方法(0)

使用AppDomain的好例子

我在采访中不断被问及AppDomains,我知道基础知识:

  • 它们是应用程序中的隔离级别(使它们与应用程序不同)
  • 他们可以有线程(使它们与线程不同)
  • 一个appdomain中的异常不会影响另一个
  • appdomains无法访问彼此的内存
  • 每个appdomain都可以有不同的安全性

我仍然没有得到使他们成为必要的东西.当你使用一个时,我正在寻找一个合理的具体情况.

回答:

  • 不受信任的代码
    • 核心应用程序受保护
      不受信任的/第三方插件被禁止通过隔离在具有安全限制的单独appdomain中来破坏共享内存和对注册表或硬盘驱动器的非授权访问,从而保护应用程序或服务器.例如ASP.NET和SQL Server托管组件代码
  • 可信代码
    • 稳定性
      应用程序分为安全,独立的特性/功能
    • 架构灵活性
      自由在单个CLR实例或每个程序中运行多个应用程序.

还要别的吗?

.net appdomain

46
推荐指数
3
解决办法
2万
查看次数

在C#中的循环中使用lock语句

让我们尝试使用示例类SomeThread,我们试图阻止在Running属性设置为false之后调用DoSomething方法,并且由OtherThread类调用Dispose,因为如果在Dispose方法之后调用它们,则世界将以我们结束知道.

感觉因为循环,有可能发生邪恶的事情.在调用DoSomething方法之前,在启动下一个循环和锁定之前,可以将Running更改为false,并在它到达锁定之前调用Disposed.在这种情况下,生活不会很好.

当我在一个简单易于维护的方法中使用循环时,我正在研究如何处理这个问题.为了记录,我确实考虑过Double Lock Check图案,但它似乎并不适合C#.

警告:这是一个简化的示例,试图让您更容易关注循环和锁定问题.如果我没有详细说明某些地方请告诉我,我会尽力填写任何细节.

public class SomeThread : IDisposable
{
    private object locker = new object();
    private bool running = false;

    public bool Running 
    { 
        get
        {
            lock(locker)
            {
                return running;
            }
        }
        set
        {
            lock(locker)
            {
                running = value;
            }
        }
    }

    public void Run()
    {
        while (Running)
        {
            lock(locker)
            {
                DoSomething1();
                DoSomething2();
            }
        }
    }

    private void DoSomething1()
    {
        // something awesome happens here
    }

    private void DoSomething2()
    {
        // something more awesome happens here …
Run Code Online (Sandbox Code Playgroud)

c# multithreading loops locking

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

手动定时C#线程

我需要为长时间运行的线程添加超时.我们遇到了一些外部问题,这些问题有时会导致该线程无限期地挂在某一行代码上.为了使我们的进程更健壮,我们希望检测到线程不再主动运行/轮询并中止线程.这将让我们清理资源并重新启动线程.

添加此功能的首选方法是什么?

c# multithreading timeout

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

标签 统计

c# ×2

multithreading ×2

.net ×1

appdomain ×1

locking ×1

loops ×1

timeout ×1