.Net Native VKによる1Cの非同期プログラミング

これは、 ネイティブVKを介した1Cでの.Netクラスのクロスプラットフォーム使用の記事の続きです またはLinux IIでCOMを置き換える



.Netでは、多くのクラスに非同期メソッドがあります。 1Cでは、たとえば次のように使用できます



=(.GetStringAsync(uriSources)).Result;
      
      





前の記事の同義語について思い出させてください/同義語の追加



 .(HTTPClient.(),"","GetStringAsync"); .(Task.(),"","Result");
      
      





ロシア語で何でも使える



 =(.()).;
      
      





ただし、このような非同期メソッドを使用できます。



  = (.(HttpClient.(),handler.())); =("System.Collections.Generic.List`1[System.Threading.Tasks.Task]");     URL()  =(.GetStringAsync()); .Add(.()); ; Task=("System.Threading.Tasks.Task");  .Count>0  =(.ToArray());  = Task.WaitAny(.()); ();  = (.get_Item()).Result; (()); .RemoveAt(); ;
      
      





もちろん、これは完全に非同期プログラミングではありませんが、リクエストごとに同期メソッドを個別に呼び出すよりも優れています。



ただし、非同期呼び出しを行う必要があります。 これを行うために、単純なクラスを作成しました。



 public class  {//    ,   ,       public object ; //   public Task ; //   1   . public String ; public (Task , String , Object ) { this. = ; this. = ; this. = ; .ContinueWith((t) => { var AW = new AutoWrap(this); AutoWrap.1("", , AW.()); }); } }
      
      





そして、1C側で:



  (,) =(ExpandoObject.()); .=; .=;  ;  // ()  ()  = (.(HttpClient.(),handler.())); =("System.Collections.Generic.List`1[System.Threading.Tasks.Task]"); =0;     URL()  //   =(.GetStringAsync()); //       =(,); //public static void (System.Threading.Tasks.Task , String , Object ) .(.(),"",.()); =+1; ; //     =("TestDllForCoreClr.","TestDllForCoreClr"); =(.(.(),"   ")); Thread=("System.Threading.Thread"); //   2   =(.Async(2)); =("Async",2); .(.(),"",.()); 2=(.Async(0)); =("Async",0); .(2.(),"",.());   ( ) =(.); =(.); ("="+.); ("="+.); //       // IsFaulted  ,   Exception    (.IsFaulted)  //   =.Exception; (" "+.()); //     1   .Exception   //       //   ,      // (" "+.(.Exception)); ; ; =.Result; (());   (, , ) //   . ("="+); ("="+); ("="+);  =""  =(); (+"()"); ; 
      
      





コードについて少し説明します。



ネイティブVCではAddOhandlerを使用できないため、1Cで呼び出す必要があるメソッドの名前をAsynchronous Executorに渡してエミュレートします



 .(.(),"",.());
      
      





外部イベントがトリガーされたときに呼び出されます。



   =""  =(); (+"()"); ;
      
      





この場合、イベント変数は受信ページに保存され、メソッドが呼び出されます



 ()
      
      





.Netアセンブリで外部イベントを使用することについて



これを行うには、フィールドを定義します



  public Action<string, string, string> 1;
      
      





そして、1Cからインストールします。



 =("TestDllForCoreClr., TestDllForCoreClr, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); =(.(.(),"   ")); =(.1C()); .1=.(); .Test();
      
      





.Netクラス内で、メソッドを呼び出します



 this?.1("", "", );
      
      





同時に、プロシージャは1Cで呼び出されます



  (, , ) ("="+); ("="+); ("="+); 
      
      







1CでC#の構文を最大化しようとしました。 そして私にとっては、C ++でネイティブAPIを使用するよりも、この形式でC#でVKを記述する方が簡単です。 この場合、1Cで.Netクラスの使用を統合できます。 同義語を追加すると、キリル文字ですべてを書くことができます。 イテレータなどのサポートを追加できます。



Windowsには多くのActiveXがありますが、COM言語を自分の言語で書くことは難しくありません。

しかし、これはクロスプラットフォームではありません。



.Net Coreと1Cの.Netオブジェクトに対するこのラッパーを使用すると、膨大な数のライブラリとクラスを使用して1Cの機能を大幅に拡張できます。 そして、言語の開発に焦点を当て、最後にクロージャー、Linq、インテリセンスの型指定(TypeScriptに類似)を追加します。 yeldに似たモーダルダイアログを分割し、C#で待機します。 また、クロージャーを使用したサーバー呼び出しの類似物もお待ちください。



この開発は誰にとってもあまり興味がないことを理解しています。 しかし、私はそれを開発することに興味がありました。 さらに、.Net Coreを試してReflectionを使用する人は興味深いでしょう



サンプルとソースはここからダウンロードできます。



All Articles