Используя Action <Action>в качестве параметра, почему это невозможно здесь?Что я могу сделать, чтобы решить эту проблему? - PullRequest
0 голосов
/ 22 сентября 2011

Используя Action в качестве параметра, почему это невозможно здесь? Что я могу сделать, чтобы решить эту проблему?

static void Main(string[] args)
{
    while (true)

        {

            int eventsNum = 1000;
            var evt = new CountdownEvent(eventsNum);

            Stopwatch sw = new Stopwatch();

            Action<Action> rawThreadTest = o =>
            {
                new Thread(() =>
                   {
                       o();
                   }).Start();
            };

            Action<Action> threadPoolTest = o =>
            {
                new Thread(() =>
                {
                    o();
                }).Start();
            };

    //Here I get ct error "The type arguments for method cannot be inferred from the usage. Try specifying the type arguments explicitly."  
            CallTestMethod(eventsNum, "raw thread", evt, sw, rawThreadTest);
            CallTestMethod(eventsNum, "thread pool", evt, sw, threadPoolTest);

            Console.ReadKey();
        }
    }


    private static void CallTestMethod<T>(int eventsNum, string threadType, CountdownEvent evt, Stopwatch sw, Action<Action> proc)
    {
        sw.Restart();
        evt.Reset();
        for (int i = 0; i < eventsNum; i++)
        {
            proc(() =>
            {
                Thread.Sleep(100);
                evt.Signal();
            });
        }

        evt.Wait();
        sw.Stop();

        Console.WriteLine("Total for a {0} : {1}", threadType, sw.Elapsed);
        Console.WriteLine("Avg for a {0} : {1}", threadType, sw.ElapsedMilliseconds / eventsNum);
    }

}

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

CallTestMethod имеет универсальный параметр T, для которого вы не указываете аргумент типа при его вызове.

Однако, похоже, все равно не привыкнешь.

2 голосов
/ 22 сентября 2011

Вы будете чувствовать себя глупо, но ваша подпись метода CallTestMethod имеет ненужный универсальный параметр - <T>.

Уберите его, и вы готовы идти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...