長時間実行する関数があります。私はTask
でそれらをラップして、それぞれが連続して完了するのを待つのではなく、それらをすべて同時に実行できるようにしたいと思います。Staticコンストラクタで呼び出されたときにTask.Run(...)を使用したメソッドをラップします
メソッドが呼び出され、関連するすべてのフィールド値とメソッドおよびプロパティが静的クラス内に存在します。
私はTask.Run
でメソッドをラップするとハングしているので、staticクラスコンストラクターが完了しないという問題があります。必要なMininmal, Complete and Verifiable例の要件...
using System;
using System.Linq;
using System.Threading.Tasks;
namespace MCVEAsyncHang
{
class Program
{
private static readonly string[] _foo;
static Program()
{
_foo = Task.WhenAll(Task.Run(new Func<string>(One))).Result;
}
private static string One()
{
return "Foo";
}
private static void Print()
{
Console.WriteLine(
_foo.Aggregate((total, current) =>
total + string.Format("{0}{1}", Environment.NewLine, current)));
}
static void Main(string[] args)
{
Print();
Console.WriteLine("Done");
Console.ReadLine();
}
}
}
私はちょうど他のいくつかのメソッドを作成して、それを呼び出すことができます理解(と私は(しぶしぶそう)する必要があります場合)に準拠して、それであれば
可能であれば、静的なクラスのコンストラクタ内にこれを保持したいと思います。
あなたは「結果」が何をしているか知っていますか? –
余分なスペースがなく、 "行頭にブレース"形式を使用すると、従来のやり方でコードを再フォーマットしても問題ありませんか?それはちょうど私かもしれませんが、空白がこれを読むのをもっと難しくしています。 –
@JonSkeet読むのが難しくなることは何でもしてください。 – Will