zoukankan      html  css  js  c++  java
  • Today's interview of C#

    I think they are advanced topics.

    C#

      1. when will you use list, when will you use hashtable.

      2. when will you use Idispose.

      3.

    Async and Await

     public async Task<string> DoAsync5()
            {
               Task<string> mytask=Task.Run<string>(() =>
                {
                    for (int j = 0; j < 20; j++)
                    {
                        System.Threading.Thread.Sleep(100);
                        Console.Write("------------Async thread: " + j.ToString() + " ");
                    }

                    return "good";
                });

               return await mytask;

               //return "good";
                //Task.Factory.StartNew();

                //IAsyncResult ar = mydoasync2.BeginInvoke(new AsyncCallback(CallbackMethod), mydoasync2);

                //return result;

            }

    publicasyncTask<string> DoAsync()

    {

    Task<string> mytask = DoAsync5();

    for (int i = 0; i < 100; i++)

    {

    System.Threading.Thread.Sleep(10);

    Console.Write("Main thread: " + i.ToString() + " ");

    }

     

    string mytaskResult = await mytask;

    Console.Write("Both threads: " + mytaskResult);

    return mytaskResult;

    }

    If you want to use await and async, you must call await twice.

    1. In async function's definition.

    2. In the excution funciton.

    You must await a awaitable task!!!!!!

    How to make a awaitable task. Define a task by task.run and await it......

    It is strangely.

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("主线程测试开始..");
            AsyncMethod();
            Thread.Sleep(1000);
            Console.WriteLine("主线程测试结束..");
            Console.ReadLine();
        }
     
        static async void AsyncMethod()
        {
            Console.WriteLine("开始异步代码");
            var result = await MyMethod();
            Console.WriteLine("异步代码执行完毕");
        }
     
        static async Task<int> MyMethod()
        {
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("异步执行" + i.ToString() + "..");
                await Task.Delay(1000); //模拟耗时操作
            }
            return 0;
        }

    ------------------------------------------------------------------------------------------

    About begininvoker and callback.

    you need to send the delegation itself to callback. If not, callback can't end this invoker correctly. 

    Now, there is theory and then there is practice. You have found, like many other developers before you, that you can often get away with ignoring this documented requirement. It may be an implementation detail whether EndInvoke actually does anything that's absolutely necessary to prevent your application from crashing, leaking memory, etc. But here's the thing: if it's a documented requirement, you really ought to do it. This is not just about theory; it's about protecting yourself in the event of change.

    By documenting this requirement, the designers of this asynchronous calling mechanism basically gave themselves the freedom to change the way BeginInvoke and EndInvoke work down the line so that, if there were sufficient reason (e.g., a performance enhancement), EndInvoke could suddenly become a lot more necessary. Suppose it would suddenly result in a deadlock if you forgot it. They've already covered themselves by saying always call EndInvoke; if your app stops working because you didn't follow this requirement, the onus is on you.

    I'm not saying this is necessarily a likely scenario. My point is simply that you shouldn't—or at least I wouldn't—ask "Is this really necessary?" with the mindset of If I can get away with leaving it out, then I will, since it is documented that you should do it.

    http://stackoverflow.com/questions/4585042/is-delegate-endinvoke-really-necessary

  • 相关阅读:
    BZOJ 1150 [CTSC2007]数据备份Backup(贪心+优先队列)
    BZOJ 1053 [HAOI2007]反素数ant(约数个数)
    BZOJ 1066 [SCOI2007]蜥蜴(最大流)
    CodeForces 772A Voltage Keepsake
    HDU 6030 Happy Necklace
    HDU 6031 Innumerable Ancestors
    HDU 6026 Deleting Edges
    HDU 6024 Building Shops
    HDU 6029 Graph Theory
    HDU 6025 Coprime Sequence
  • 原文地址:https://www.cnblogs.com/gaoxianzhi/p/4426309.html
Copyright © 2011-2022 走看看