Hangfire只运行一次后台作业

时间:2015-09-15 10:50:13

标签: c# .net hangfire

我正在运行一个hangfire服务器。 我创建了一个后台作业,如下所示

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:padding="16dp"
    android:layout_height="wrap_content">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="10">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Check In Weight"
            android:textColor="@android:color/black"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
            android:gravity="center"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginTop="20dp"
        android:layout_weight="20">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:inputType="number"
            android:hint="Current Weight"
            android:background="@drawable/editext_border"
            android:id="@+id/edtCheckInWhgt"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:gravity="center"
        android:layout_marginTop="20dp"
        android:layout_weight="10">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="OK"
            android:gravity="center"
            android:id="@+id/btncheckin"
            android:textColor="@android:color/holo_blue_light"
            android:background="?android:attr/selectableItemBackground"/>

    </LinearLayout>


</LinearLayout>

此作业应该只运行一次,但在Web门户的处理作业部分,我看到它一次运行多次。如何防止这种情况并确保作业只被启动一次?

2 个答案:

答案 0 :(得分:4)

每次拨打电话时,都会向DB添加另一个作业。如果您在启动时进行此操作并且您的应用经常重启,则会导致您报告的行为。您可以在方法调用中使用属性DisableConcurrentExecution,也可以通过Hangfire.RecurringJob.AddOrUpdate代替BackgroundJob.Enqueue

将作业作为定时重复工作输入到数据库中

答案 1 :(得分:0)

   var options = new BackgroundJobServerOptions { WorkerCount =1 };
            app.UseHangfireServer(options);

我希望这会对你有所帮助