Aracılığıyla paylaş


Observable.FromAsyncPattern<T1, TResult> Yöntemi (Func<T1, AsyncCallback, Object, IAsyncResult>, Func<IAsyncResult, TResult>)

Başlangıç/Bitiş çağırma işlev çiftlerini zaman uyumsuz bir işleve dönüştürür.

Ad Alanı:System.Reactive.Linq
Derleme: System.Reactive (System.Reactive.dll içinde)

Syntax

'Declaration
Public Shared Function FromAsyncPattern(Of T1, TResult) ( _
    begin As Func(Of T1, AsyncCallback, Object, IAsyncResult), _
    end As Func(Of IAsyncResult, TResult) _
) As Func(Of T1, IObservable(Of TResult))
'Usage
Dim begin As Func(Of T1, AsyncCallback, Object, IAsyncResult)
Dim end As Func(Of IAsyncResult, TResult)
Dim returnValue As Func(Of T1, IObservable(Of TResult))

returnValue = Observable.FromAsyncPattern(begin, _
    end)
public static Func<T1, IObservable<TResult>> FromAsyncPattern<T1, TResult>(
    Func<T1, AsyncCallback, Object, IAsyncResult> begin,
    Func<IAsyncResult, TResult> end
)
public:
generic<typename T1, typename TResult>
static Func<T1, IObservable<TResult>^>^ FromAsyncPattern(
    Func<T1, AsyncCallback^, Object^, IAsyncResult^>^ begin, 
    Func<IAsyncResult^, TResult>^ end
)
static member FromAsyncPattern : 
        begin:Func<'T1, AsyncCallback, Object, IAsyncResult> * 
        end:Func<IAsyncResult, 'TResult> -> Func<'T1, IObservable<'TResult>> 
JScript does not support generic types and methods.

Tür Parametreleri

  • T1
    İlk işlev türü.
  • Tresult
    Sonucun türü.

Parametreler

Dönüş Değeri

Tür: System.Func<T1, IObservable<TResult>>
Başlangıç/Bitiş çağrısı işlev çifti.

Açıklamalar

FromAsyncPattern işleci, zaman uyumsuz çağrıları basitleştirmek için kullanılır. Çağrıyı başlatmak/sonlandırmak için zaman uyumsuz çağrıyı sizin için zaman uyumsuz çağrıyı işleyen zaman uyumsuz bir işlevle sarmalar. işlevi, sonuçla aynı türde bir gözlemlenebilir dizi döndürür. Örneğin, System.IO.Directory.GetFiles için zaman uyumsuz bir çağrı ayarlayabilirsiniz. Bu yöntemin sonucu, istenen dosyaların listesini içeren bir dize dizisidir. Bu nedenle FromAsyncPattern işlecinden döndürülen zaman uyumsuz işlev gözlemlenebilir bir dize dizisi[] döndürebilir. Bu, bu konunun örnek kodunda gösterilmiştir. Farklı sayıda giriş parametresi alan yöntem çağrılarını işlemek için bu işlecin çeşitli aşırı yüklemeleri vardır. Zaman uyumsuz bir çağrı ayarlamak için, FromAsyncPattern işlecine yapılan çağrıyla türleri belirtin. Belirtilen son tür, dönüş değeri türüdür. Örneğin, System.IO.Directory.GetFiles en fazla üç giriş parametresi alabilir ve sonuç olarak bir dize dizisi döndürür. Aşağıdaki kod parçacığı türlerin sırasını gösterir.

delegate string[] GetFilesDelegate(string searchPath, string searchPattern, SearchOption searchOption);


GetFilesDelegate getFiles = Directory.GetFiles;


//**************************************************************************************************//
//***  Observable.FromAsyncPattern<Param 1 Type, Param 2 Type, Param 3 Type, Return value type>  ***//
//**************************************************************************************************//
var getFileList = Observable.FromAsyncPattern<string, string, SearchOption, string[]>(getFiles.BeginInvoke, getFiles.EndInvoke);

Örnekler

Bu örnekte, C:\Program Files dizini altındaki tüm dosyaları listelemek için System.IO.Direcotry.GetFile'ın zaman uyumsuz olarak çağrılması gösterilmektedir. Örnek, FromAsyncPattern işleci tarafından sağlanan zaman uyumsuz işlevi kullanır. Eylem olay işleyicisi, sonuçtaki her dosya adını konsol penceresine yazmak için zaman uyumsuz çağrı için geri çağırma işlevi görür.

using System;
using System.Reactive.Linq;
using System.IO;

namespace Example
{                                       
  delegate string[] GetFilesDelegate(string searchPath, string searchPattern, SearchOption searchOption);

  class Program
  {
    static void Main()
    {                                                                                                                    
      //********************************************************************************************************************//
      //*** For this example, Reactive Extensions is used to wrap an asynchronous call that recursively enumerates files ***//
      //*** in a given directory.                                                                                        ***//
      //********************************************************************************************************************//
      string mySearchPath = "C:\\Program Files";                                                                                   
      GetFilesDelegate getFiles = Directory.GetFiles;


      //*****************************************************************************************************************************//
      //*** Reactive Extensions will wrap the asynchronous call to the delegate returning the asynchronous function, getFileList. ***//
      //*** Calling the asynchronous function returns the observable sequence of the string[].                                    ***//
      //***                                                                                                                       ***//
      //*** There are many overloaded versions of the FromAsyncPattern operator. The types signified here are based on parameters ***//
      //*** in the signature of actual method being called asynchronously. The types are specified in their proper order followed ***//
      //*** by the return type (ex. <Param 1 type, Param 2 type, Param 3 type, return type> ).                                    ***//
      //*****************************************************************************************************************************//
      var getFileList = Observable.FromAsyncPattern<string, string, SearchOption, string[]>(getFiles.BeginInvoke, getFiles.EndInvoke);    
      IObservable<string[]> fileObservable = getFileList(mySearchPath,"*.*",SearchOption.AllDirectories);


      //*********************************************************************************************************************//
      //*** We subscribe to this sequence with an action event handler defined with the lambda expression. It acts as the ***//
      //*** callback for completion of the asynchronous operation.                                                        ***//
      //*********************************************************************************************************************//
      fileObservable.Subscribe(fileList =>
      {
        foreach (string f in fileList)
        {
          Console.WriteLine(f.ToString());
        }
      });


      Console.WriteLine("Running async enumeration of the {0} directory.\n\nPress ENTER to cancel...\n",mySearchPath);
      Console.ReadLine();
    }
  }
}

Aşağıdaki örnek çıkış, örnek kod tarafından oluşturulur.

Running async enumeration of the C:\Program Files directory.

Press ENTER to cancel...

C:\Program Files\desktop.ini
C:\Program Files\ATI\CIM\Bin64\atdcm64a.sys
C:\Program Files\ATI\CIM\Bin64\ATILog.dll
C:\Program Files\ATI\CIM\Bin64\ATIManifestDLMExt.dll
C:\Program Files\ATI\CIM\Bin64\ATISetup.exe
C:\Program Files\ATI\CIM\Bin64\CompressionDLMExt.dll
C:\Program Files\ATI\CIM\Bin64\CRCVerDLMExt.dll
C:\Program Files\ATI\CIM\Bin64\DetectionManager.dll
C:\Program Files\ATI\CIM\Bin64\difxapi.dll
C:\Program Files\ATI\CIM\Bin64\DLMCom.dll
C:\Program Files\ATI\CIM\Bin64\EncryptionDLMExt.dll
C:\Program Files\ATI\CIM\Bin64\InstallManager.dll
C:\Program Files\ATI\CIM\Bin64\InstallManagerApp.exe
C:\Program Files\ATI\CIM\Bin64\InstallManagerApp.exe.manifest
C:\Program Files\ATI\CIM\Bin64\LanguageMgr.dll
C:\Program Files\ATI\CIM\Bin64\mfc80u.dll
C:\Program Files\ATI\CIM\Bin64\Microsoft.VC80.ATL.manifest
C:\Program Files\ATI\CIM\Bin64\Microsoft.VC80.CRT.manifest
C:\Program Files\ATI\CIM\Bin64\Microsoft.VC80.MFC.manifest
C:\Program Files\ATI\CIM\Bin64\Microsoft.VC80.MFCLOC.manifest
C:\Program Files\ATI\CIM\Bin64\Microsoft.VC80.OpenMP.manifest
C:\Program Files\ATI\CIM\Bin64\msvcp80.dll
C:\Program Files\ATI\CIM\Bin64\msvcr80.dll
C:\Program Files\ATI\CIM\Bin64\PackageManager.dll
C:\Program Files\ATI\CIM\Bin64\readme.rtf
C:\Program Files\ATI\CIM\Bin64\SetACL64.exe

Ayrıca Bkz.

Başvuru

Gözlemlenebilir Sınıf

FromAsyncPattern Aşırı Yüklemesi

System.Reactive.Linq Ad Alanı