장기 실행 함수가 있습니다. 나는 Task
에 그들을 포장하고 싶습니다. 그래서 나는 각각을 순차적으로 끝내기를 기다리지 않고 동시에 모든 것을 실행할 수 있습니다.Static 생성자에서 호출하면 Task.Run (...) 메서드를 래핑합니다.
메서드가 호출되며 모든 관련 필드 값과 메서드 및 속성이 정적 클래스 내에 있습니다.
Task.Run
내에서 메서드를 래핑 할 때 정적 클래스 생성자가 정지하기 때문에 문제가 발생합니다. 필요한 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