0

サービス参照で CancelTransactionByRefPos という名前のメソッドを呼び出す必要があります。このメソッドには次のシグネチャがあります。

int CancelTransactionByRefPos(long refPos, out string resultDescription);

このメソッドが「0」を返す場合、キャンセルは成功です。このメソッドが別の値を返す場合、メソッドを再度呼び出す必要があります。

CancelTransactionByRefPos を呼び出す Cancel メソッドを作成しました。応答が返されるまでに 30 秒かかる場合があるため、呼び出しが非同期で行われることが非常に重要です。

私の方法は次のようになります。

public void Cancel(long refPos, GiftCard giftCard, Account_3_2 account)
    {
       var task =  Task.Factory.StartNew(() =>
        {
            int result;
            do
            {
                string resultDescription;
                result = _client.CancelTransactionByRefPos(refPos, out resultDescription);
                // logic to log the result with the giftcard and account parameter
            } while (result != 0);
        });
        // task.Wait(); // ######## Uncomment this -> code executes! ######## 
    }

コメントの task.Wait() 部分でキャンセルすると、ThreadAbortException が発生します。

task.Wait() のコメントを外して再度実行すると、すべてうまくいきますが、タスクが実行されるまで待たなければならない場合は、メソッドを非同期で呼び出しても意味がありません。

編集

また、サービス参照を構成して、非同期操作を生成できるようにしました。同じ問題。

4

0 に答える 0