이 메서드에 전달하는 매개 변수를 기반으로 계산을 수행하는 장기 실행 비동기 메서드가 있습니다.장기 실행 가능 작업의 매개 변수 변경
는이 같은 비트 보이는: 기본적으로이 방법은 내 UI에서라고
public async Task<Measurement> StartMeasurementAsync(
int duration,
int nbr,
double parameter,
IProgress<IntermediateResults> progress,
CancellationToken cancellationToken)
{
Measurement measurement = new Measurement { Parameter = parameter };
for(int i = 0; i < nbr; i++)
{
var rawData = await RunMeasurement(duration, progress, cancellationToken);
var treatedData = DataTreatment.Treat(rawData, parameter);
measurement.Data.Add(treatedData);
cancellationToken.ThrowIfCancellationRequested();
}
return measurement;
}
, 나는 사용자가 변경할 수있는 내 원시 데이터를 시각적으로 표현을 새로 진행을 사용하고 있습니다 매개 변수. 이 매개 변수는 메서드에서 전달 된 매개 변수와 같습니다.
for 루프에서 기다린 후에 호출되는 데이터 처리는 UI에서 호출되기 때문에 사용자는이 매개 변수가 원시 데이터에서 변경 한 결과를 "실시간"으로 볼 수 있습니다. 그런데 매개 변수가 변경되었다는 것을 장기 실행 작업에 알려야하므로 올바르게 Measurement
에 저장됩니다.
내가 막힌 곳에서 어떻게이 매개 변수가 변경되었다는 것을 알 수 있습니까?
글자 그대로 묻는 것을 해석하면 'ref' 매개 변수를 전달할 수 있지만 다른 스레드의 ref 매개 변수를 변경하면 데이터 손상을 묻는 중입니다. 난 그냥 기존의 작업을 취소하고 새로운 매개 변수를 사용하여 새로운 하나를 시작한다고 생각합니다. –
async 메서드를 호출하여 매개 변수를 기반으로 계산을 수행하고 해당 매개 변수가 계산 중에 변경 될 수있는 경우 계산을 다시 시작하지 않아야합니까? – ericpap
@BenRobinson AFAIK 당신은'async' 메소드로'ref'를 사용하여 시작할 수 없습니다. –