public class DataProcessor
private object _sampleDataLock = new object();
private TaskCompletionSource<Data> _sampleData;
private Thread _processThread;
_processThread = new(ProcessDataLoop);
var processedData = ProcessNextData();
_sampleData?.SetResult(processedData.Clone());
public Task<Data> SampleData(TimeSpan timeout)
_sampleData ??= new TaskCompletionSource<Data>();
return _sampleData.Task.WithTimeout(timeout);
public class DataInspector
private DataProcessor _processor;
public async Task InspectData()
var data = await _processor.SampleData(TimeSpan.FromSeconds(30));
public static void Main()
Console.WriteLine("Hello World");