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

  • 相关阅读:
    摄像头标定GML Camera Calibration
    joda.money.Money
    aop the less note 1
    good notes
    yingyu biji 1
    flowable note1
    activiti note1
    CET4/6
    Web应用界面好帮手!DevExtreme React和Vue组件全新功能上线
    Web UI开发推荐!Kendo UI for jQuery自定义小部件——处理事件
  • 原文地址:https://www.cnblogs.com/gaoxianzhi/p/4426309.html
Copyright © 2011-2022 走看看