System.AddIn (MAF) を使用して別のプロセスでアドインをホストするシステムがあります。アドイン内で、async と await を活用するコードを使用したいと考えています。
MAF はリモート処理を使用してプロセス間で通信し、この通信をほとんど制御できないため、デッドロックに陥るリスクを冒さずに非同期コードを使用する最善の方法を決定しようとしています。
たとえば、現在、次のようなメソッドを定義するコントラクトがあります。
[AddInContract]
public interface IWorker : IContract
{
string DoWork(string workToDo);
}
の AddIn 実装内でDoWork
、非同期 API を使用できるようにしたいと考えています。文字列から AddInAdapter と HostAdapter の内部に変換する方法を思いつくことができれば素晴らしいことTask<string>
ですが、デッドロックに陥らないようにしたいのです。
ビュー コントラクトを次のように定義したいと思います。
[System.AddIn.Pipeline.AddInBaseAttribute()]
public interface IWorker
{
Task<string> DoWork(string workToDo);
}
次に、コントラクト内で次のことを行ってアダプターを表示しても安全ですか。
public virtual string DoWork(string workToDo)
{
var t = _view.DoWork(Contracts.AddInSideAdapters.DoWorkAddInAdapter.ContractToViewAdapter(workToDo)).ConfigureAwait(false);
return t.GetAwaiter().GetResult();
}