Самый простой способ сделать огонь и забыть метод в C#?

Если по какой-то причине вам не нравятся интерактивные редакторы, вы можете использовать git rebase --onto.

Скажем, вы хотите изменить Commit1. Во-первых, ответвьте от до Commit1:

git checkout -b amending [commit before Commit1]

Во-вторых, возьмите Commit1 с cherry-pick:

git cherry-pick Commit1

Теперь внесите изменения, Создание Commit1':

git add ...
git commit --amend -m "new message for Commit1"

И, наконец, после того, как спрятали любые другие изменения, перенесите оставшиеся коммиты до master поверх вашего нового коммита:

git rebase --onto amending Commit1 master

Читать: «перебазировать на ветку amending все коммиты между Commit1 (не включительно) и master (включительно)». То есть, Commit2 и Commit3, полностью исключая старый Commit1. Вы можете просто выбрать их, но так проще.

Не забудьте почистить свои ветви!

git branch -d amending
133
задан Wai Ha Lee 10 January 2016 в 13:29
поделиться

5 ответов

ThreadPool.QueueUserWorkItem(o => FireAway());

(пять лет спустя .. .)

Task.Run(() => FireAway());

, как указано Луисперезфдом .

253
ответ дан 23 November 2019 в 23:58
поделиться

Чтобы добавить в ответ Уилла , если это консольное приложение,просто добавьте AutoResetEvent и WaitHandle , чтобы предотвратить его выход до завершения рабочего потока:

Using System;
Using System.Threading;

class Foo
{
    static AutoResetEvent autoEvent = new AutoResetEvent(false);

    static void Main()
    {
        ThreadPoolQueueUserWorkItem(new WaitCallback(FireAway), autoEvent);
        autoEvent.WaitOne(); // Will wait for thread to complete
    }

    static void FireAway(object stateInfo)
    {
        System.Threading.Thread.Sleep(5000);
        Console.WriteLine("5 seconds later");
        ((AutoResetEvent)stateInfo).Set();
    }
}
17
ответ дан 23 November 2019 в 23:58
поделиться

Простой способ - создать и запустить поток с лямбда-выражением без параметров:

(new Thread(() => { 
    FireAway(); 
    MessageBox.Show("FireAway Finished!"); 
}) { 
    Name = "Long Running Work Thread (FireAway Call)",
    Priority = ThreadPriority.BelowNormal 
}).Start();

Используя этот метод поверх ThreadPool.QueueUserWorkItem, вы можете присвоить новому потоку имя, чтобы упростить отладку. Кроме того, не забывайте использовать расширенную обработку ошибок в своей программе, потому что любые необработанные исключения вне отладчика внезапно приведут к сбою вашего приложения:

enter image description here

15
ответ дан 23 November 2019 в 23:58
поделиться

The simplest .NET 2.0 and later approach is using the Asynchnonous Programming Model (ie. BeginInvoke on a delegate):

static void Main(string[] args)
{
      new MethodInvoker(FireAway).BeginInvoke(null, null);

      Console.WriteLine("Main: " + Thread.CurrentThread.ManagedThreadId);

      Thread.Sleep(5000);
}

private static void FireAway()
{
    Thread.Sleep(2000);

    Console.WriteLine("FireAway: " + Thread.CurrentThread.ManagedThreadId );  
}
3
ответ дан 23 November 2019 в 23:58
поделиться

Призвание BeginInvoke и не поймание EndInvoke не является хорошим подходом. Ответ прост: Причина, по которой вы должны позвонить в ENDINVOOKE, заключается в том, что результаты вызова (даже если нет возврата), должен быть кэширован .NET, пока endInvoke не вызывается.Например, если вызываемый код бросает исключение, то исключение кэшируется в данных вызова. Пока вы не позвоните в EndInvoke, он остается в памяти. После того, как вы позвоните в ENDINVOOKE, память может быть выпущена. Для этого конкретного случая возможно, что память останется до тех пор, пока процесс не выключится, поскольку данные сохраняются внутри кода вызова. Я думаю, что GC может в конечном итоге сбрать его, но я не знаю, как GC будет знать, что вы отказались от данных по сравнению с тому, что вы просто долгое время забрали. Я сомневаюсь, что это делает. Следовательно, может возникнуть утечка памяти.

Больше можно найти на http://haacked.com/archive/2009/01/09/asynchronous-fire-ando-forget-with-lambdas.aspx

7
ответ дан 23 November 2019 в 23:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: