Ejemplo n.º 1
0
    static async Task DownLoad(GetContentsAsync GetContentsAsync)
    {
        await DownLoadInner(GetContentsAsync).ConfigureAwait(false);
        await DownLoadInner(GetContentsAsync).ConfigureAwait(false);

        //await Task.WhenAll(new Task[]{ DownLoadInner(GetContentsAsync), DownLoadInner(GetContentsAsync)});
        //如果用了WhenAll,则两个会同时执行,而无法利用Cahche的结果。
    }
Ejemplo n.º 2
0
    static async Task DownLoadInner(GetContentsAsync GetContentsAsync)
    {
        string[] urls = new string[]
        {
            "http://msdn.microsoft.com",
            "http://www.contoso.com",
            "http://www.microsoft.com"
        };

        Stopwatch stopwatch = new Stopwatch();

        stopwatch.Start();
        var results = await Task.WhenAll(urls.Select(url => GetContentsAsync(url))).ConfigureAwait(false);

        stopwatch.Stop();

        Console.WriteLine("Retrieved {0} characters. Elapsed time was {1} ms.",
                          results.Sum(result => result.Length),
                          stopwatch.ElapsedMilliseconds);
    }
Ejemplo n.º 3
0
    public static Task <string> GetContentsAsync(string url)
    {
        Task <string> contents;

        if (!s_urlToContents.TryGetValue(url, out contents))
        {
            Console.WriteLine("Before call @" + Thread.CurrentThread.ManagedThreadId);
            GetContentsAsync GetContentsAsyncInner = async(u) => {
                Console.WriteLine("async {@" + Thread.CurrentThread.ManagedThreadId);
                var content = await new WebClient().DownloadStringTaskAsync(url);
                //var content = await new WebClient().DownloadStringTaskAsync(url).ConfigureAwait(false);
                Console.WriteLine("async }@" + Thread.CurrentThread.ManagedThreadId);
                s_urlToContents.TryAdd(url, Task.FromResult(content));
                return(content);
            };
            //这个版本试验直接在里面定义async lambda
            contents = GetContentsAsyncInner(url);
        }
        return(contents);
    }