Ausführung der Zeitmethode in einem anderen Thread und Abbruch bei Zeitüberschreitung

Hallo, ich versuche, eine asynchrone Methode auszuführen, um die Dauer zu bestimmen und die Methode abzubrechen, wenn ein Timeout überschritten wird.

Ich habe versucht, dies mit Async zu implementieren und warten. Aber ohne Glück. Vielleicht im Overerengineering dies, werden alle Eingaben geschätzt

Es sollte beachtet werden, dass ich die Schnittstelle "TheirInterface" (daher der Name) nicht ändern kann.

Code bisher:

using System;
using System.Diagnostics;

public interface TheirInterface
{
    void DoHeavyWork();
}

public class Result
{
    public TimeSpan Elapsed { get; set; }
    public Exception Exception { get; set; }

    public Result(TimeSpan elapsed, Exception exception)
    {
        Elapsed = elapsed;
        Exception = exception;
    }
}

public class TaskTest
{
    public void Start(TheirInterface impl)
    {
        int timeout = 10000;

        // TODO
        // Run HeavyWorkTimer(impl)
        // 
        // Wait for timeout, will be > 0
        // 
        // if timeout occurs abortheavy
    }

    public Result HeavyWorkTimer(TheirInterface impl)
    {
        var watch = new Stopwatch();

        try
        {
            watch.Start();
            impl.DoHeavyWork();
            watch.Stop();
        }
        catch (Exception ex)
        {
            watch.Stop();

            return new Result(watch.Elapsed, ex);
        }

        return new Result(watch.Elapsed, null);
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage