当前位置: 首页>>代码示例>>C#>>正文


C# CancellationToken.ShouldNotBeNull方法代码示例

本文整理汇总了C#中System.Threading.CancellationToken.ShouldNotBeNull方法的典型用法代码示例。如果您正苦于以下问题:C# CancellationToken.ShouldNotBeNull方法的具体用法?C# CancellationToken.ShouldNotBeNull怎么用?C# CancellationToken.ShouldNotBeNull使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在System.Threading.CancellationToken的用法示例。


在下文中一共展示了CancellationToken.ShouldNotBeNull方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: DownloadDataTask

        /// <summary>
        /// <paramref name="address"/>의 리소스를 비동기적으로 다운받아 byte array로 반환하는 Task{byte[]}를 빌드합니다.
        /// </summary>
        /// <param name="webClient"><see cref="WebClient"/> 인스턴스</param>
        /// <param name="token">작업 취소를 위한 Token</param>
        /// <param name="address">리소스 위치</param>
        /// <returns></returns>
        public static Task<byte[]> DownloadDataTask(this WebClient webClient, CancellationToken token, Uri address) {
            webClient.ShouldNotBeNull("webClient");
            token.ShouldNotBeNull("token");
            address.ShouldNotBeNull("address");

            if(IsDebugEnabled)
                log.Debug("WebClient를 이용하여 지정된 주소로부터 리소스를 비동기 방식으로 다운받습니다... address=[{0}]", address.AbsoluteUri);

            var tcs = new TaskCompletionSource<byte[]>(address);
            token.Register(webClient.CancelAsync);

            // 비동기 완료 시의 처리를 정의합니다.
            DownloadDataCompletedEventHandler handler = null;
            handler =
                (sender, args) =>
                EventAsyncPattern.HandleCompletion(tcs, args, () => args.Result, () => webClient.DownloadDataCompleted -= handler);
            webClient.DownloadDataCompleted += handler;

            try {
                webClient.DownloadDataAsync(address, tcs);
            }
            catch(Exception ex) {
                if(log.IsWarnEnabled) {
                    log.Warn("WebClient를 이용하여 리소스 Data를 비동기적으로 다운받는데 실패했습니다. address=[{0}]", address.AbsoluteUri);
                    log.Warn(ex);
                }

                webClient.DownloadDataCompleted -= handler;
                tcs.TrySetException(ex);
            }

            var result = tcs.Task;

            if(result.IsCompleted)
                result = result.ContinueWith(antecedent => DecompressByContentEncoding(webClient, antecedent.Result),
                                             TaskContinuationOptions.ExecuteSynchronously);
            return result;
        }
开发者ID:debop,项目名称:NFramework,代码行数:45,代码来源:WebClientAsync.cs

示例2: DownloadStringTask

        /// <summary>
        /// 지정된 Uri로부터, 리소스를 문자열로 비동기적으로 다운 받습니다. 
        /// 인코딩 문제가 있을 때에는 <see cref="DownloadDataTask(System.Net.WebClient,System.Uri)"/>를 이용하여 Encoding을 직접 설정해 주시기 바랍니다.
        /// </summary>
        /// <param name="webClient"><see cref="WebClient"/> 인스턴스</param>
        /// <param name="token">작업 취소를 위한 Token</param>
        /// <param name="address">리소스 위치</param>
        /// <returns></returns>
        public static Task<string> DownloadStringTask(this WebClient webClient, CancellationToken token, Uri address) {
            webClient.ShouldNotBeNull("webClient");
            token.ShouldNotBeNull("token");
            address.ShouldNotBeNull("address");

            if(IsDebugEnabled)
                log.Debug("WebClient로 지정된 주소로부터 비동기적으로 문자열을 다운받습니다... address=[{0}]", address.AbsoluteUri);

            // NOTE: 압축 통신시 응답 정보가 압축되어 있을 경우, 압축해제해서 결과를 반환해야 한다. 그래서 DownloadDataTask를 사용한다.
            //
#if !SILVERLIGHT
            return
                DownloadDataTask(webClient, token, address)
                    .ContinueWith(antecedent => antecedent.Result.ToText(),
                                  TaskContinuationOptions.ExecuteSynchronously);
#else
			return DownloadStringTaskInternal(webClient, CancellationToken.None, address);
#endif
        }
开发者ID:debop,项目名称:NFramework,代码行数:27,代码来源:WebClientAsync.cs

示例3: OpenWriteTask

        /// <summary>
        /// <paramref name="address"/>에 비동기적으로 data를 전송하기 위한 쓰기용 Stream을 반환합니다.
        /// </summary>
        /// <param name="webClient">WebClient 인스턴스</param>
        /// <param name="token">작업 취소를 위한 Token</param>
        /// <param name="address">리소스의 주소</param>
        /// <param name="method">전송 방법 : Http인 경우는 POST, FTP인 경우는 STOR입니다.</param>
        /// <returns></returns>
        public static Task<Stream> OpenWriteTask(this WebClient webClient, CancellationToken token, Uri address, string method) {
            webClient.ShouldNotBeNull("webClient");
            token.ShouldNotBeNull("token");
            address.ShouldNotBeNull("address");

            if(IsDebugEnabled)
                log.Debug("지정된 주소에 데이타 쓰기용 Stream을 엽니다... address=[{0}], method=[{1}]", address.AbsoluteUri, method);


            var tcs = new TaskCompletionSource<Stream>(address);
            token.Register(webClient.CancelAsync);

            OpenWriteCompletedEventHandler handler = null;
            handler =
                (s, e) => EventAsyncPattern.HandleCompletion(tcs, e, () => e.Result, () => webClient.OpenWriteCompleted -= handler);
            webClient.OpenWriteCompleted += handler;

            try {
                webClient.OpenWriteAsync(address, method, tcs);
            }
            catch(Exception ex) {
                if(log.IsWarnEnabled) {
                    log.Warn("WebClient를 이용하여 데이타를 전송하기 위해 쓰기용 Stream을 오픈하는데 실패했습니다. address=[{0}]", address.AbsoluteUri);
                    log.Warn(ex);
                }

                webClient.OpenWriteCompleted -= handler;
                tcs.TrySetException(ex);
            }

            return tcs.Task;
        }
开发者ID:debop,项目名称:NFramework,代码行数:40,代码来源:WebClientAsync.cs

示例4: DownloadFileTask

        /// <summary>
        /// <paramref name="address"/>의 리소스 정보를 비동기적으로 다운받아 파일로 저장합니다.
        /// </summary>
        /// <param name="webClient"></param>
        /// <param name="token">작업 취소용 Token</param>
        /// <param name="address">다운 받을 리소스의 주소</param>
        /// <param name="filename">다운로드 리소스를 저장할 로컬 파일명</param>
        /// <returns></returns>
        public static Task DownloadFileTask(this WebClient webClient, CancellationToken token, Uri address, string filename) {
            webClient.ShouldNotBeNull("webClient");
            token.ShouldNotBeNull("token");
            address.ShouldNotBeNull("address");
            filename.ShouldNotBeWhiteSpace("filename");

            if(IsDebugEnabled)
                log.Debug("WebClient를 이용하여 지정된 주소의 리소스를 비동기적으로 다운받아 파일로 저장합니다... address=[{0}], filename=[{1}]",
                          address.AbsoluteUri, filename);


            // NOTE: 압축 통신을 대비해서, Byte 통신 후, 저장한다.
            //
            return
                DownloadDataTask(webClient, token, address)
                    .ContinueWith(antecedent => FileAsync.WriteAllBytes(filename, antecedent.Result),
                                  TaskContinuationOptions.ExecuteSynchronously);
        }
开发者ID:debop,项目名称:NFramework,代码行数:26,代码来源:WebClientAsync.cs


注:本文中的System.Threading.CancellationToken.ShouldNotBeNull方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。