1

別々のドメインで非同期にコードを実行する方法は?

たとえば、私はメソッドを持っています:

public void DoSomething()
    {
        // do something
    }

そして、私はこのように10の異なるドメインでそれを実行したいと思います:

for (int i = 0; i < 10; i++)
        {
            AppDomain domain = AppDomain.CreateDomain("NewDomain - " + i);
            domain.ExecuteAsync(DoSomething);
        }
4

1 に答える 1

1

私はこのアプローチを使用して私のタスクを解決しました:

for (int i = 0; i < options.NumberOfThreads; i++)
            {
                tasks[i] = Task.Factory.StartNew(() =>
                    {
                        using (Isolated<TesterInvoker> isolated = new Isolated<TesterInvoker>())
                        {
                            isolated.Value.Invoke();
                        }
                    });                 
            }

private class TesterInvoker : MarshalByRefObject
    {
        public void Invoke()
        {
            // do something
        }
    }

    private class Isolated<T> : IDisposable 
        where T : MarshalByRefObject
    {
        private AppDomain _domain;
        private T _value;

        public Isolated()
        {
            Type type = typeof(T);

            _domain = AppDomain.CreateDomain("Isolated:" + GetHashCode(),
               null, AppDomain.CurrentDomain.SetupInformation);

            _value = (T)_domain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName);
        }

        public T Value
        {
            get
            {
                return _value;
            }
        }

        public void Dispose()
        {
            if (_domain != null)
            {
                AppDomain.Unload(_domain);

                _domain = null;
            }
        }
    }
于 2012-10-02T12:19:41.627 に答える